SQL DISTINCT 去重
使用SQL DISTINCT操作符消除重复的结果
在本教程中,我们将学习如何使用SQL DISTINCT操作符消除结果集中重复的行。
在SELECT语句返回的结果集中可能包含重复的行。为了消除重复,可以使用 DISTINCT关键字:
SELECT DISTINCT
column_1, column2
FROM
table_name;
指定DISTINCT后,
数据库引擎使用选择列的值来判断结果集中行的唯一性。
如果选择只有一列,就使用这列的值来判断唯一性。
如果选择了多个列,则将基于这些列中的值的组合来判断行的唯一性。
SQL删除重复行 DISTINCT 示例
选择员工所在的城市:
SELECT city FROM employees

有的员工是在同一个城市的,比如London, 要删除掉重复的结果,这时我们就可以是DISTINCT关键字
SELECT DISTINCT city FROM employees

SQL DISTINCT 删除包含多列的重复行示例
要查找员工所在的唯一city和country的列表,您可以在DISTINCT后面指定city和country列:
city和country列的组合值将用于确定结果集中行的唯一性。
SELECT DISTINCT
city, country
FROM
employees;

比如很多国家都有城市叫圣地亚哥(Santiago)的, 如果通过city列进行消除重复,结果就存在不确定性。通过两列就能筛选出是哪个国家的圣地亚哥。
特殊情况: DISTINCT 消除包含NULL的重复行
特殊情况,如果查询的结果中包含了NULL值,DISTINCT 会将NULL 视为彼此的副本,所以只会返回一个NULL值
SELECT
region
FROM
employees

SELECT DISTINCT
region
FROM
employees

带聚合函数的SQL DISTINCT
除了用于消除行重复之外,还可以将DISTINCT与聚合函数一起使用:
COUNT: COUNT(DISTINCT column)对结果集中不同的值进行计数。SUM: SUM(DISTINCT column)用来计算不同值的和。
例如,要统计员工所在不同城市的数量:
SELECT
COUNT(DISTINCT city)
FROM
employees;

要计算 item 表中不同listprice单价的总和,可以使用DISTINCT 和SUM() 函数如下:
SELECT SUM(DISTINCT listprice) FROM item

DISTINCT和 ALL比较
在这里需要提一下 关键字ALL。与DISTINCT不同,ALL用于包含结果集中包含重复行的所有行。
SELECT 语句默认就是使用ALL, 所以你不需要显示指定它。
下面两个语句结果是一样的:
SELECT
column_1, column_2
FROM
table;
SELECT ALL
column_1, column_2
FROM
table;

