Distinct一般是用来去除查询结果中的重复记录的,而且这个语句在只可以在select中使用
在使用mysql时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段,如果要查询不重复的记录,有时候可以用group by :
1.单列
相同值只保留1个
select distinct country from person;
2.多列
所有指定的列信息都相同,才会被认为是重复的信息
select distinct country, province from person;
从上例中可以发现,当distinct应用到多个字段的时候,其应用的范围是其后面的所有字段,而不只是紧挨着它的一个字段,而且distinct只能放到所有字段的前面,如下语句是错误的:
3.NULL处理
Distinct对NULL是不进行过滤的,即返回的结果中是包含NULL值的。
4.COUNT统计
select count(distinct name) from A;
表中name去重后的数目, SQL Server支持,而Access不支持
count是不能统计多个字段的,下面的SQL在SQL Server和Access中都无法运行。
select count(distinct name, id) from A;
若想使用,请使用嵌套查询,如下:
select count(*) from (select distinct xing, name from B) AS M;
5.distinct必须放在开头
错误示例:
select id, distinct name from A;
MySQL中的DISTINCT关键字用于去除查询结果中的重复记录。它可以应用于单列或多列查询,但无法直接返回其他字段信息。当与COUNT函数结合时,可以统计不重复的字段数量。注意,DISTINCT对NULL值不进行过滤,并且必须放在所有字段之前。在某些场景下,GROUP BY可以作为替代方案。使用COUNT(DISTINCT column)时,不同数据库系统可能有不同的支持情况,例如SQL Server支持,而Access不支持。对于多字段的COUNT统计,需要使用嵌套查询。
2223

被折叠的 条评论
为什么被折叠?



