没有高并发,亿万级数据优化的基础sql八

各位童鞋大家好,咱们又相遇了,今天讲解基础sql第八篇,继续select查询语句。

相信大家都写过,用过分组查询吧。还是以oracle为例,如下语句

select age, count(1) from mytable  where age > 18 group by age having count(1) > 1

这是一个常用的分组语句,统计出大于18岁的每个年龄的总人数。

还记得在我们初次学习的时候,老师应该就教导过‘分组统计’吧。group by 作为分组语句关键词,select 后的字段是需要和group by后的字段保持一致的。select 后的字段如果没出现在group by 语句中就会报错。但是 group by语句中的字段没出现在 select 语句中是可以的。分组如果不涉及到统计聚合的话在实际业务中的意义应该不会太多。因为单一分组查询只是查出某个字段或者组合字段的唯一值,也就是去重.但是去重的方法还可以用 distinct。大家在实际工作中如果涉及到分组的业务就可以考虑使用group by。

group by 的使用有个小问题,也是作者初期常出错的一个问题。就是 where 和having 的位置问题。where 是需要在 group by 的左边,having count 需要在group by 的右边哦。大家只要记住分组都是分组过滤之后的数据,要先把数据过滤好我们需要的数据,然后再进行分组才有意义,对吧。

分组还有一种形式。设想这样一个业务场景:

随着企业不断发展,每个时间段企业都会受到监管的定期评级,评级可能变好,变差或者维持不变。这个时候如果需要统计某一个时间段内评级为B的天数。该如何处理呢!

假设有张表rate_table.里面只存有 企业名称 (name), 企业评级(rate),评级日期(rate_date)。我们的需求是要统计3月20号到4月20号这个时间段评级为B的天数。是不是需要考虑3种情况,一种是3/20到4/20时间段内评级更新的情况,一种是3/20之前最后一次更新的情况,一种是4/20后最早的一次更新情况(该例中实际不用考虑这一情况,但是部分其它需求还是需要的)。要实现这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangzewu1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值