DISTINCT简介DISTINCT 的作用是消除结果集中的重复行,语法如下:SELECT DISTINCTcolumnsFROMtable_nameWHEREwhere_conditions;需要注意的是,如果字段中有NULL值并且要对该列使用DISTINCT 子句,则MySQL仅保留一个NULL值,因为DISTINCT 子句将所有NULL值视为相同的值。DISTINCT 多列当DISTINCT
DISTINCT简介
DISTINCT 的作用是消除结果集中的重复行,语法如下:
SELECT DISTINCT columns FROM table_name WHERE where_conditions;
需要注意的是,如果字段中有NULL值并且要对该列使用DISTINCT 子句,则MySQL仅保留一个NULL值,因为DISTINCT 子句将所有NULL值视为相同的值。
DISTINCT 多列
当DISTINCT作用在多个字段的时候,它只会将所有字段值都相同的记录“去重”掉。
DISTINCT语句与GROUP BY 语句
如果在不使用聚合函数的情况下在SELECT语句中使用GROUP BY子句,则GROUP BY子句的行为与DISTINCT 子句类似。
以下语句使用GROUP BY子句从customers表中选择客户的唯一状态。
customers表的字段:
+------------------------+ | customers | +------------------------+ | customerNumber | | customerName | | contactLastName | | contactFirstName | | phone | | addressLine1 | | addressLine2 | | city | | state | | postalCode | | country | | salesRepEmployeeNumber | | creditLimit | +------------------------+ > SELECT state FROM customers GROUP BY state; +---------------+ | state | +---------------+ | NULL | | BC | | CA | | Co. Cork | | CT | | Isle of Wight | ...
使用以下DISTINCT子句将获得同样的结果:
> SELECT DISTINCT state FROM customers; +---------------+ | state | +---------------+ | NULL | | NV | | Victoria | | CA | | NY | | PA | | CT | | MA | ...
如果将ORDER BY子句添加到使用DISTINCT子句的语句中 ,则结果集将进行排序,并且与使用GROUP BY子句的语句返回的结果集相同。
> SELECT DISTINCT state FROM customers ORDER BY state; +---------------+ | state | +---------------+ | NULL | | BC | | CA | | Co. Cork | | CT | | Isle of Wight | | MA | ...
DISTINCT 和 LIMIT子句
如果将DISTINCT 子句与LIMIT子句一起使用,MySQL会在找到LIMIT子句中指定的唯一行数时立即停止搜索。
以下是在 customers表中查询选择前五个非null唯一州。
> SELECT DISTINCT state FROM customers WHERE state IS NOT NULL LIMIT 5; +----------+ | state | +----------+ | NV | | Victoria | | CA | | NY | | PA | +----------+
去重计数
看到网上很多花里胡哨的写法,其实用DISTINCT就可以简单搞定
SELECT COUNT(DISTINCT 去重字段) FROM table