1148. 文章浏览 I

90 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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
  • 执行结果

image.png

三、语句执行

测试结果

image.png

四、总结

排序

使用ORDER BY后跟要排序的字段,之后跟排序规则,如果不写则默认升序ASC 这里设置降序为DESC

ORDER BY 字段  ASC/DESC

distinct

  • 用来查询不重复记录的条数,即用distinct来返回不重复字段的条数。
  • 必须放在要查询字段的开头,即放在第一个参数
  • 只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用
  • 不能与all同时使用,默认情况下,查询时返回的就是所有的结果、
SELECT DISTINCT author_id id FROM Views