1、统计重复记录数
查询重复人名的次数并列出
select count(姓名) as 重复次数,姓名from 某表
group by 姓名
order by 重复次数 asc
首先,group by 姓名,可以将所有相同姓名的项集合在一起。
然后,count(姓名),将姓名次数进行统计, 然后作为重复次数,
最后,order by通过重复次数排序,
asc表示排序为由小到大,即递增顺序。
2、用一条sql语句查询出每门课程都大于80分的学生姓名,一个学生不止有一门课程
一开始看到这题,简单的写了出来并没有理解面试官的真正意图,理解能力真的是爆了。。
分析:重点是在“每门”这个词上,只要有一门不符合要求,就踢出
反向思考,找出课程小于80分(可以找出有一些课程小于80分,所有课程小于80分的学生)的学生姓名再排除这些学生剩余的就是所有课程都大于80分的学生姓名了,
name kecheng fenshu
张三 语文 81
张三 数学 75
张三 英语 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
select distinct name from aa where name not in (select distinct name from aa where fengshu<=80)
红色的意思是:
先把 distinct 去掉,查询的结果是分数小于80的所有学生姓名,结果是有两个张三,一个李四
加上distinct之后,去重聚合一下,变成一个张三,一个李四
外层name not in 这个范围 有三个张三 再一distinct 就是一个张三
备注:distinct的用法:
作用于单列、多列、count联合使用 需要注意的是
.distinct必须放在开头
select id, distinct name from A; --会提示错误,因为distinct必须放在开头