mysql查询表中成绩60的_一条SQL语句实现查询成绩-60、60~80、+80的人数的方法

现在在实验室,总结一下上午学到的一个SQL方法。下面我创建一个数据表:

a4c26d1e5885305701be709a3d33442f.pngSELECT

* FROM `students`;

可以看到数据表中存在六条数据,如果使用传统的查询方法,我们需要三条SQL语句,分别是:

select count(*) from students where score<60;

select count(*) from students where score>80;

select count(*) from students where score between 60 and 80;

现在介绍三种使用一条SQL语句实现这个操作的方法:

case 0:

a4c26d1e5885305701be709a3d33442f.pngselect

sum(if(score<60 , 1,0)) as

'<60',sum(if(score between 60 and 80,1,0)) as

'60~80',sum(if(score >80,1,0)) as

'>80' from students;

case 1:

a4c26d1e5885305701be709a3d33442f.pngselect

if(score<60,'<60',if(score between 60

and 80,'60~80','>80')) as rang,count(*) from

students group by

if(score<60,'<60',if(score

between 60 and

80,'60~80','>80'));

​case 2:

a4c26d1e5885305701be709a3d33442f.pngselect

score,count(*)   from students group by case

when score<60 then

'<60' when  score between 60 and 80

then '60~80' else '>80' end;

为什么能够用三条简单的语句解决的数据库查询我们要使用这么复杂的SQL语句呢?

这个可不是为了装逼;

因为每一条SQL语句事实上都是扫描一次数据库,把这三条SQL语句写成一条符合逻辑的SQL语句,实际上只需要扫描一遍数据库,而这大大节省了系统开销;

因为在处理商用数据库的时候,动辄几千万上亿的数据量,一次全表扫描就可能几个小时,这个时候复杂结构的SQL语句的优势就表现出来了;​

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值