SQL DISTINCT 去重

时间:2018-11-15 17:42:16  来源:igfitidea点击:

使用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

DISTINCTALL比较

在这里需要提一下 关键字ALL。与DISTINCT不同,ALL用于包含结果集中包含重复行的所有行。
SELECT 语句默认就是使用ALL, 所以你不需要显示指定它。

下面两个语句结果是一样的:

SELECT
    column_1, column_2
FROM
    table;
SELECT ALL
    column_1, column_2
FROM
    table;