一个SQL的几种写法
生活随笔
收集整理的這篇文章主要介紹了
一个SQL的几种写法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
某天在某技術群看見有人發了這樣一個圖求助,一看就覺得這題考查的是利用sql行轉列
我腦海第一時間就想到用oracle的decode函數來寫,但又想到題目沒有具體說是哪一種數據庫~如果用decode的話,在mysql下是完全不一樣的用法(也是因為這次我才知道mysql也有decode方法,但跟oracle的完全不一樣,其他數據庫暫沒研究)
所以我就回復寫了這樣一個sql
初想的SQL?
select t1.d,t1.c1 '勝',t2.c2 '負' from (select count(result) c1,d from t_result where result = '勝' group by d) t1 LEFT outer join (select count(result) c2,d from t_result where result = '負' group by d) t2 on t1.d = t2.d這樣的寫法比較直觀,就是先拿“勝”的出來,在拿“負”的出來,最后用日期關聯起來
PS:這里的t_result是數據表,d是時間列,result是勝負結果列
?
后面我細想了一下,這樣結果是出來的,但其實效率不高,因為兩次select會導致兩次表的掃描,因為之前研究過一下oracle,對這些還是比較敏感的,所以后面又改寫了一下
(可能后面寫的并不是最優,但起碼比最初的有進步,性能有所提升,畢竟優化都是一步一步來的)
SELECT d,SUM(CASE WHEN result='勝' THEN 1ELSE 0END),SUM(CASE WHEN result='負' THEN 1ELSE 0END) FROM t_result GROUP BY d這樣掃面一次表就可以得出結果了
?
最后,再附上oralce的decode函數寫法
SELECT d,SUM(decode(result,'勝',1,0)),SUM(decode(result,'負',1,0)) FROM t_result GROUP BY d轉載于:https://www.cnblogs.com/ForeVerWater/p/4012196.html
總結
以上是生活随笔為你收集整理的一个SQL的几种写法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: codeblocks如何watch数组
- 下一篇: POJ 2391 Ombrophobic