mysql关键字 distinct去重

MySQL中的DISTINCT关键字用于去除查询结果中的重复记录。它可以应用于单列或多列查询,但无法直接返回其他字段信息。当与COUNT函数结合时,可以统计不重复的字段数量。注意,DISTINCT对NULL值不进行过滤,并且必须放在所有字段之前。在某些场景下,GROUP BY可以作为替代方案。使用COUNT(DISTINCT column)时,不同数据库系统可能有不同的支持情况,例如SQL Server支持,而Access不支持。对于多字段的COUNT统计,需要使用嵌套查询。

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; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值