54 浏览文章 Ⅱ
Opened this issue · 0 comments
astak16 commented
题目
题目链接:浏览文章 Ⅱ
此表的每一行都表示某人在某天浏览了某位作者的某篇文章。
请注意,同一人的 author_id
和 viewer_id
是相同的。
编写一条 SQL 查询同一天阅读至少两篇文章的人,结果按照 author_id
升序排列。
create table views (
article_id int,
author_id int,
viewer_id int,
view_date date
);
insert into views (article_id, author_id, viewer_id, view_date) values
(1, 3, 5, '2019-08-01'),
(3, 4, 5, '2019-08-01'),
(1, 3, 6, '2019-08-02'),
(2, 7, 7, '2019-08-01'),
(2, 7, 6, '2019-08-02'),
(4, 7, 1, '2019-07-22'),
(3, 4, 4, '2019-07-21'),
(3, 4, 4, '2019-07-21');
SQL:
select
distinct viewer_id id
from views group by view_date, viewer_id
having count(distinct article_id) >= 2 order by id;
解析
- 按照
view_date
、viewer_id
分组,并使用having
筛选- 如果是
having count(viewer_id) >= 2
将会筛选出查看同一篇文章的人 - 所以使用
having count(distinct article_id) >= 2
就能筛选出一个人一天至少查看了两篇文章
- 如果是
- 使用
distinct
对viewer_id
进行去重- 因为可能会有一个人在不同的时间都看了两篇以上的文章