订阅更新

同一天读了至少两篇文章的人

SQL 实战 123 题 · 第 69 题 中等 约 2 分钟读完

LeetCode 1149 · 多列分组、去重计数

本文目录
  1. 面试怎么回答
  2. 题意
  3. 表结构
  4. 思路
  5. 参考解法
  6. 易错点

面试怎么回答

按 view_date, viewer_id 分组,HAVING COUNT(DISTINCT article_id) >= 2,再对 viewer_id 去重排序。分组键决定了统计口径,「同一天」就必须把日期放进分组键。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

题意

同一张浏览表,找出在同一天里看过至少两篇不同文章的读者,去重后按 ID 升序。

表结构

  • Views:article_id、author_id、viewer_id、view_date;可能有重复行

思路

「同一天」意味着要按(日期, 读者)分组,组内 COUNT(DISTINCT article_id) ≥ 2。一个读者可能在多天都满足条件,所以最后对读者去重。

参考解法

SELECT DISTINCT viewer_id AS id
FROM Views
GROUP BY view_date, viewer_id
HAVING COUNT(DISTINCT article_id) >= 2
ORDER BY viewer_id

易错点

  • 只按读者分组就变成「总共读过两篇」,丢掉了「同一天」的约束。
  • 同一篇文章读两次不算两篇,要对 article_id 去重。
刷题进度保存在当前浏览器