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

MySQL的简单复合语句使用_第1张图片

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

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

你可能感兴趣的:(MySQL)