题目链接:点击打开链接
题目大意:略。
解题思路:略。
AC 代码
-- 解决方案(1)
WITH t1 AS(SELECT a.post_id aid, r.post_id rid, action_date FROM Actions a LEFT JOIN Removals r ON a.post_id = r.post_id WHERE extra = 'spam'),
t2 AS(SELECT COUNT(DISTINCT rid)/COUNT(DISTINCT aid) percent FROM t1 GROUP BY action_date)
SELECT ROUND(AVG(percent) * 100, 2) average_daily_percent
FROM t2
-- 解决方案(2)
SELECT ROUND(AVG(IFNULL(remove.cnt, 0)/total.cnt) * 100, 2) AS average_daily_percent
FROM (
SELECT action_date, COUNT(DISTINCT post_id) AS cnt
FROM actions
WHERE extra = 'spam'
GROUP BY action_date
) total
LEFT JOIN (
SELECT action_date, COUNT(DISTINCT post_id) AS cnt
FROM actions
WHERE extra = 'spam' AND post_id IN (SELECT post_id FROM Removals)
GROUP BY action_date
) remove
ON total.action_date = remove.action_date