哔哩哔哩数开Sql题
Emmmm虽然选择题全靠蒙,但对sql题还是挺好奇的,想问问大家这两题算难还是简单啊(非科班菜鸡刚学的心里没有B数)&&求第二题答案~
第一题我的答案先贴上(因为考试期间把partition位置给忘了,不是AC的答案,是后来百度完自己测试的),有大佬帮忙看看或者说交流一下查询的效率就更好啦,另外求第二题思路(有答案更好啦,感谢大佬)
第一题:给了用户的充值记录表,求各个用户充值次数最多的充值金额(也就是分档次充值了,同一档一个金额)和该金额的最后一次充值时间(希望我没记错)
表结构(我用的sql sever所以有些变动):
CREATE TABLE user_recharge( id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, userid INT NOT NULL, user_name VARCHAR(50) NOT NULL, recharge DECIMAL(30, 4) NOT NULL DEFAULT '0', ts DATETIME )
要求输出:用户id,用户名,充值金额,充值次数,最后一次充值时间
我的答案:
SELECT ur.userid, ur.user_name, ur.recharge, recharge_cnt, max(ur.ts) FROM user_recharge AS ur LEFT JOIN (SELECT userid, recharge, recharge_cnt, RANK() OVER(PARTITION BY userid ORDER BY user_recharge_cnt.recharge_cnt DESC) as rnk FROM (SELECT userid, recharge, COUNT(recharge) as recharge_cnt FROM user_recharge GROUP BY userid, recharge ) AS user_recharge_cnt ) AS user_recharge_max_cnt ON ur.userid = user_recharge_max_cnt.userid AND ur.recharge = user_recharge_max_cnt.recharge WHERE rnk = 1 GROUP BY ur.userid, ur.user_name, ur.recharge, recharge_cnt
第二题题目:给了用户登录直播间的登录退出记录,以每三分钟为一个时间片,求2019-01-01这一天在线人数最多的时间片?(完了忽然想不起来题目,求大佬纠正,我之后改)
要求输出:开始时间,直播间id,在线人数(好像就这三个吧)
建表语句不记得了,字段大概是有用户id,直播间id,进入直播间的时间(time),退出直播间的时间,和日期