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;