【sql】一些简单的sql查询

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必须放在开头

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值