SQL SELECT DISTINCT 语句


SQL SELECT DISTINCT 语句

什么是SELECT DISTINCT?

SELECT DISTINCT 是 SQL 中的一个关键字,用于去除 SELECT 查询语句中重复的结果行。DISTINCT 仅对 SELECT 语句中选定的列去重,不会对所有列去重,如:SELECT DISTINCT * FROM table; 是无效的。

SELECT DISTINCT 语法

SELECT DISTINCT column1, column2, ...
FROM table_name;
  • column1, column2, ... 表示需要去重的列。
  • table_name 表示需要查询数据的表名。

在实际使用中,也可以使用别名来代替列名,如:SELECT DISTINCT column1 AS c1, column2 AS c2 FROM table_name。

SELECT DISTINCT 例子

考虑以下数据表 customers。

+----+-------+----------+---------------------+
| id | name  |   email  |        created      |
+----+-------+----------+---------------------+
| 1  | Jack  | jack@xx.com | 2021-01-01 12:00:00 |
| 2  | Tom   | tom@xx.com  | 2021-02-01 08:00:00 |
| 3  | Jerry | jerry@xx.com| 2021-02-01 14:00:00 |
| 4  | Jack  | jack@xx.com | 2021-03-01 10:00:00 |
+----+-------+----------+---------------------+

我们想要查询所有不重复的用户姓名,可以使用以下 SQL 代码:

SELECT DISTINCT name FROM customers;

输出结果为:

+-------+
| name  |
+-------+
| Jack  |
| Tom   |
| Jerry |
+-------+

SELECT DISTINCT 和 GROUP BY 的区别

在 SQL 中实现去重可以使用 SELECT DISTINCT 和 GROUP BY 语句,这里简要介绍两者的区别。

  • SELECT DISTINCT 只能去除整行重复的结果数据,而 GROUP BY 则可以分组聚合,并对聚合结果去重。
  • GROUP BY 支持聚合函数,比如 SUM,AVG,COUNT 等函数可以对聚合分组的结果进行统计计算。

举个例子:我们想要统计所有用户的数量和不重复用户的数量,代码可能如下:

SELECT COUNT(*) AS total_count, COUNT(DISTINCT name) AS distinct_count FROM customers;

总结

SELECT DISTINCT 和 GROUP BY 都支持对查询结果去重,前者只去除整行重复,后者支持分组聚合功能。在实际使用中应根据需要选择其中一种方法,或混合两种方法进行使用。