dao层mysql复合语句_MySQL的简单复合语句使用

作为一个java开发,一直掌握不好学习MySQL的程度,学精的话毕竟有DBA在没什么必要还浪费时间,但是若学浅了,那简单的复合语句别人都会写就你不会也挺尴尬。所以想借此机会逐渐开始拾起数据库这方面的知识。

首先上个SQL语句压压惊:

SELECT village.regionArea,sum(CASE

WHEN facility.daily_capacity>30 THEN

1

ELSE

0

END) as upFifty,

sum(CASE

WHEN facility.daily_capacity<=30 THEN

1

ELSE

0

END) as downFifty

FROM `facility_info` facility

LEFT JOIN village_info village on facility.region_code = village.regionCode

GROUP BY village.regionArea

目前的业务需求是,需要统计以某个乡镇组别下的数据量大于30吨,以及小于等于30吨的乡镇个数,目前是联两张表,分别是village_info村庄基础信息表,以及facility_info设施终端表,通过两个表的region_code 字段是否相等进行联系。

初始化的SQL语句是:

SELECT village.id,village.regionArea,facility.name,facility.daily_capacity

FROM `facility_info` facility

LEFT JOIN village_info village on facility.region_code = village.regionCode

2335cbc521dd312cab7ed6bb0c1cf1bc.png

而当我要判断daily_capacity这个字段大于30或者小于等于30做两个计数统计的时候,第一次下意识的就选用了case when语句,当然这个方向是对的。但是我却愚蠢的使用了count(case...when...)来统计计数,这就造成了统计结果不是我想要的结果,而是group by regionArea的分组总条数。这也说明了我对count()的概念不理解,后面改用了sum(case...when...)即解决了这个问题,请看最上面的SQL语句,即是最终版。

最后,我贴出的SQL语句仅供参考,毕竟每个业务环境下的业务逻辑不同,表字段也不同,所以只能对阅读者作出一个思路拓展,希望能够共勉。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值