昨天每种举报理由的帖子数
LeetCode 1113 · 条件过滤、去重计数
面试怎么回答
WHERE action = 'report' AND action_date = '2019-07-04',按 extra 分组 COUNT(DISTINCT post_id)。统计「帖子数」就要按帖子去重,这是指标口径问题,写 SQL 前先和需求方确认。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
题意
行为表记录用户对帖子的各种操作,举报(report)操作的附加字段是举报理由。假设今天是 2019-07-05,统计昨天每种举报理由被举报的帖子数。
表结构
- Actions:user_id、post_id、action_date、action(view / like / reaction / comment / report / share)、extra(可为空);没有主键
思路
过滤出 action = report 且日期是昨天的记录,按举报理由分组,对帖子去重计数(同一帖子被多人举报只算一次)。
参考解法
SELECT
extra AS report_reason,
COUNT(distinct post_id) AS report_count
FROM
Actions
WHERE
`action` = 'report' AND action_date = date_add('2019-07-05',Interval -1 day)
GROUP BY
extra;
易错点
- 用 COUNT(*) 会把同一帖子的多次举报算多次,题目要的是帖子数。