zoukankan      html  css  js  c++  java
  • 在同一个sql语句中,统计不同条件的Count数量

    前几天帮同事优化了个SQL,原写法使用多个子查询这里不再重现了,大家都遇到过这样一种情况,在项目后期的维护中,

    修改别人的SQL代码,超过30行的语句,多层子查询,读起来很坑,时间久的项目伴随着人员的流通,你可能就不知道原作者写这一堆的SQL是干什么用的,

    当然碰到部分有注释习惯的朋友还是好点的,过长的SQL后期维护性与可读性很差,并且一般情况下性能也经不起推敲。

    对于长的,复杂的SQL可以有很多种处理方式

    1、沉到业务中取处理,拆分SQL

    2、抽取公用统计属性,建立冗余表

    上边简单列举这两种,不再展开,这里关注上边的问题处理

    方案一

    select id,
    count(case when 属性 in (1,2) then 1 else 0 end) as sum1,
    count(case when  属性 in (3) then 1 else 0 end) as sum2,
    sum(case when  属性 in (4,5) then 1 else 0 end) as sum3
    from 表名
    group by id
     
    方案二
     
     SELECT   
    count( * ) AS num,  

    count(if(字段=1,true,null)) AS sum1,   

    count(if字段=2,true,null)) AS sum2   

    FROM 表名 

    WHERE  其他条件

    还有其他实现方式,这里不再展开,有兴趣的朋友一起讨论呀( ⊙ o ⊙ )!

  • 相关阅读:
    [CQOI2009][BZOJ1303] 中位数图
    [JSOI2008][BZOJ1016] 最小生成树计数
    [SCOI2005][BZOJ1083] 繁忙的都市
    [HAOI2006][BZOJ2428] 均分数据
    [HAOI2008][BZOJ1054] 移动玩具
    [ZJOI2006][BZOJ1003] 物流运输trans
    AW241 楼兰图腾
    AW239 奇偶游戏
    AW244 谜一样的牛
    AW278 数字组合(0/1背包)
  • 原文地址:https://www.cnblogs.com/chenliangcl/p/7283574.html
Copyright © 2011-2022 走看看