题解 | #每个6/7级用户活跃情况#

每个6/7级用户活跃情况

http://www.nowcoder.com/practice/a32c7c8590324c96950417c57fa6ecd1

SELECT user_info.uid,
COUNT(DISTINCT DATE_FORMAT(act_time,'%Y-%m')) act_month_total,
COUNT(DISTINCT IF(YEAR(act_time)=2021,
                  DATE_FORMAT(act_time,'%Y-%m-%d'),NULL)) act_days_2021,
COUNT(DISTINCT IF(YEAR(exam_record.start_time)=2021,
                  DATE_FORMAT(exam_record.start_time,'%Y-%m-%d'),NULL)),
COUNT(DISTINCT IF(YEAR(practice_record.submit_time)=2021,
                  DATE_FORMAT(practice_record.submit_time,'%Y-%m-%d'),NULL))
FROM user_info LEFT JOIN exam_record ON user_info.uid=exam_record.uid
LEFT JOIN practice_record ON user_info.uid=practice_record.uid
LEFT JOIN (SELECT uid, start_time AS act_time FROM exam_record
           UNION 
           SELECT uid, submit_time AS act_time FROM practice_record) t1
ON user_info.uid=t1.uid
WHERE level=6 OR level=7
GROUP BY user_info.uid
ORDER BY act_month_total DESC, act_days_2021 DESC;

这道题的关键点在于,exam_record和practice_record的活跃时间怎么把它放到一起来统计,这样就可完成前两个计数要求。后两个计数要求直接按要求count就好了。要把两个时间放到一起,可以用UNION来解决。

全部评论

相关推荐

码农索隆:卡学历都不行了,开始卡颜值了
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 11:33
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务