发布时间:2025-12-09 13:47:02 浏览次数:4
一、distinct 位置
1. 单独的distinct只能放在开头,否则报错,语法错误
mysql>SELECTnickname,DISTINCT(openid)fromims_ewei_shop_member;
[SQL]SELECTnickname,DISTINCT(openid)fromims_ewei_shop_member;
[Err]1064–YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorresponds
toyourMySQLserverversionfortherightsyntaxtousenear‘DISTINCT(openid)
fromims_ewei_shop_member’atline1
2.现在把distinct放在开头
SELECTDISTINCT(openid),nicknamefromims_ewei_shop_member;
#查询成功
3.与其他函数使用时候,没有位置限制如下
SELECTnickname,count(DISTINCT(openid))fromims_ewei_shop_member;
#这种情况下是正确的,可以使用。
二、distinct用法
1.在count计算不重复的记录的时候能用到
SELECTCOUNT(DISTINCT(openid))fromims_ewei_shop_member;
#就是计算ims_ewei_shop_member表中openid不同的记录有多少条
2.在需要返回记录不同的如openid等具体值的时候可以用
SELECTDISTINCT(openid)fromims_ewei_shop_member;
#返回ims_ewei_shop_member表中不同的openid的具体的值
3.上面的情况2对于需要返回mysql表中2列以上的结果时会有歧义
#无论是
SELECTDISTINCT(openid),nicknamefromims_ewei_shop_member;
#还是
SELECTDISTINCTopenid,nicknamefromims_ewei_shop_member;
#特别注意:
#实际上返回的是openid与nickname同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得openid和nickname都相同的才被排除了,与我们期望的结果不一样,我们期望的是openid不同被过滤
#在这种情况下,distinct同时作用了两个字段,openid,nickname
#这时候可以考虑使用group_concat()函数来进行排除,不过这个mysql函数是在mysql4.1以上才支持的
#同时我们还可以利用下面的方式解决以上遇到的歧义问题通过groupby分组
用distinct的时候,如果它有索引,mysql会把它转成group by的方式执行