携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情
一、题目
Views 表:
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| article_id | int |
| author_id | int |
| viewer_id | int |
| view_date | date |
+---------------+---------+
- 此表无主键,因此可能会存在重复行。
- 此表的每一行都表示某人在某天浏览了某位作者的某篇文章。
- 请注意,同一人的 author_id 和 viewer_id 是相同的。
请编写一条 SQL 查询以找出所有浏览过自己文章的作者,结果按照 id 升序排列。
查询结果的格式如下所示:
Views 表:
+------------+-----------+-----------+------------+
| article_id | author_id | viewer_id | view_date |
+------------+-----------+-----------+------------+
| 1 | 3 | 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 |
+------------+-----------+-----------+------------+
结果表:
+------+
| id |
+------+
| 4 |
| 7 |
+------+
- 来源:力扣(LeetCode)
- 链接:leetcode.cn/problems/ar…
- 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
创建数据表
根据题意创建数据表,并填充数据
CREATE TABLE Views(
article_id INT,
author_id INT,
viewer_id INT,
view_date DATE
);
INSERT INTO Views VALUES
(1,3,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');
题解
- 根据最后结果显示以及题意讲数据会有重复数据,因此,在查询的时候要进行去重
- 要查询自己浏览自己的文章的作者,这里的判断条件是author_id = viewer_id
- 要按照 id 升序排列,这里要进行排序ORDER BY author_id
SELECT DISTINCT author_id id FROM Views WHERE author_id = viewer_id
ORDER BY author_id
- 执行结果
三、语句执行
测试结果
四、总结
排序
使用ORDER BY后跟要排序的字段,之后跟排序规则,如果不写则默认升序ASC
这里设置降序为DESC
ORDER BY 字段 ASC/DESC
distinct
- 用来查询不重复记录的条数,即用distinct来返回不重复字段的条数。
- 必须放在要查询字段的开头,即放在第一个参数
- 只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用
- 不能与all同时使用,默认情况下,查询时返回的就是所有的结果、
SELECT DISTINCT author_id id FROM Views