前幾天幫同事優化了個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 ⊙ )!
在同乙個sql語句中寫不同條件的Count數量
其實有count很難實現 可以用sum 去實現它 例子如下 select xy,sum case when jw cljgh 1 then 1 else 0 end as 留級,sum case when jw cljgh 2 then 1 else 0 end as 復學 from xjgl,bj...
同乙個TextView,不同顏色,不同字型大小設定
開發中經常會遇到同乙個textview需要顯示不同顏色,不同字型大小的文字。通過spannablestringbuilder 可以很容易的實現這兩個功能。以下是乙個自定義的spannableutils public class spannableutils spannablestringbuilde...
python 同乙個float值,id不同
10000 is 10000 true a 10000 b 10000 a is b false a 1 b 1 a is b true 解釋上面這個例子 第乙個,兩個10000 pyintobject都會在編譯的時候就生成,而且因為他們被編譯為了乙個pycodeobject所以兩個10000是一樣...