在同一個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 ⊙ )!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM