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

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

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

分别写四个查询再结合思路比较简单

SELECT 
uid,
IFNULL(act_month_total,0),
IFNULL(act_days_2021,0),
IFNULL(act_days_2021_exam,0),
IFNULL(act_days_2021_question,0)
FROM
(SELECT
uid,
COUNT(DISTINCT month) AS act_month_total
FROM
(SELECT
uid,
DATE_FORMAT(er.start_time,' %Y%m') AS month
FROM user_info ui
LEFT JOIN exam_record er USING(uid)
WHERE level IN (6,7)
UNION ALL
SELECT
uid,
DATE_FORMAT(pr.submit_time,' %Y%m') AS month
FROM user_info ui
LEFT JOIN practice_record pr USING(uid)
WHERE level IN (6,7)) t1
GROUP BY uid)a
LEFT JOIN 
(SELECT
uid,
COUNT(DISTINCT dayn) AS act_days_2021
FROM
(SELECT
uid,
DATE_FORMAT(er.start_time,' %Y%m%d') AS dayn
FROM user_info ui
LEFT JOIN exam_record er USING(uid)
WHERE level IN (6,7) AND YEAR(er.start_time) = '2021'
UNION ALL
SELECT
uid,
DATE_FORMAT(pr.submit_time,' %Y%m%d') AS dayn
FROM user_info ui
LEFT JOIN practice_record pr USING(uid)
WHERE level IN (6,7) AND YEAR(pr.submit_time) = '2021') t2
GROUP BY uid)b USING(uid)

LEFT JOIN 
(SELECT
uid,
COUNT(DISTINCT DATE_FORMAT(er.start_time,' %Y%m%d')) AS act_days_2021_exam
FROM user_info ui
LEFT JOIN exam_record er USING(uid)
WHERE level IN (6,7) AND YEAR(er.start_time) = '2021'
GROUP BY uid)c USING(uid)
LEFT JOIN 
(SELECT
uid,
COUNT(DISTINCT DATE_FORMAT(pr.submit_time,' %Y%m%d')) AS act_days_2021_question
FROM user_info ui
LEFT JOIN practice_record pr USING(uid)
WHERE level IN (6,7) AND YEAR(pr.submit_time) = '2021'
GROUP BY uid)d USING(uid)
ORDER BY act_month_total DESC,act_days_2021 DESC;

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务