在mysql数据库中用distinct语句去除重复记录,select distinct子句用于筛选出不重复的数据记录,分享几个distinct语句的例子。 mysql distinct关键字用法:
1,count统计结果,得到不重复的记录
select count( distinct id ) from tablename;
求得talbebname表中id不同的记录有多少条。
2,返回记录不同的id的具体值
select distinct id from tablename;
返回talbebname表中不同的id的具体的值
3,以上二种情况,对于返回mysql表中2列以上的结果时会有歧义
select distinct id, type from tablename;
实际上返回id与type同时不相同的结果,即distinct同时作用了两个字段,必须得id与tyoe都相同的才被排除了,与期望结果不一样。
#---------------
例子:
create table `student` (
`name` varchar(20) not null default '', `age` int(10) default '0' ) engine=innodb default charset=latin1
1,测试一
select * from student;
a 5 a 5 c 0
例子,用distinct过滤掉两列均重复的记录:
select distinct name,age from student;
返回结果:
2、测试二
select * from student;
c 2 c 5
例子:
select distinct name,age from student;
返回结果,说明distinct后面有多于一列的字段时,只有每列的值完全相同才过滤:
3,测试三
select * from student;
name age height c 2 123 c 2 456 b 20 222
group by按两列同时分组
select name,age,sum(height) from student group by name,age;
b 20 222 c 2 579
group by按两列同时分组,同时在后面加上having的条件
select name,age,sum(height) as n from student group by name,age having n > 500;
返回 c 2 579
4,测试四
select songname,sengerid,count(sengerid) as n from t_song group by songname,sengerid having n > 1 ORDER BY n DESC,songid ASC limit 10;
未知 8738 40 共同渡过 1432 24 风继续吹 1432 23 倩女幽魂 1432 23 无心睡眠 1432 23 罗百吉超嗨派对连续组曲 780 19 拒绝再玩 1432 19 风再起时 1432 18 每天爱你多一些 1480 18 千言万语 1794 18
例句:
select songname,sengerid,count(sengerid) as n from t_song group by songname,sengerid having n > 1 ORDER BY n DESC,songid ASC limit 5;
未知 8738 40 共同渡过 1432 24 风继续吹 1432 23 倩女幽魂 1432 23 无心睡眠 1432 23 经过以上两个测试可以看出,如果sql语句中含有limit,limit是对用group by进行分组,并进行相关计算以后的limit操作,而不是对limit后面的指定记录数进行分组,从n那一列的数据每一行的值都大于10就可以看出来。
5,测试五
sql语句:
select count(distinct(songid)) from feedback;
select count(distinct songid) from feedback;
6,测试六
sql语句:
select feedback_id,songid,songname,max(singername),max(time) as new_time from feedback group by songid order by new_time desc;
7,sql语句中where,group by,order by及limit的顺序
sql语句:
where xxx,group by xxx,order by xxx,limit xxx
8,group by与count的问题
例子:
select feedback_id,songid,songname,max(singername),max(time) as new_time from feedback group by songid order by new_time desc;
报错: (责任编辑:IT) |