mysql 行轉列問題

這幾天所作的工作涉及到數據庫行轉列的問題

記錄一下出現的錯誤,以免以後再犯

舉網上最通俗的例子吧

 

Name Subject Result
張三    語文         80
張三    數學         90
張三    物理         85
李四    語文         85
李四    數學         92
李四    物理         82

 

想要的結果

姓名 語文 數學 物理
張三  80  90    85
李四  85  92    82  

 

 

正確的寫法

select name as 姓名,
max (case when subject='語文' then result end) as 語文,
max (case when subject='數學' then result end) as 數學,
max (case when subject='物理' then result end) as 物理
from T1 group by name

 

最開始寫的時候不知道max 函數有什麼用

而且也沒有加 group by

最後的結果是

姓名     語文      數學      物理

張三      80

張三                 90        

張三                             85

李四      85  

李四                 92       

李四                             82

發現結果不對,然後加了 group by語句

結果是

張三      80

李四      85

只有語文項有數據,其他項都爲空

 

想了很久,最後照葫蘆畫瓢加上了max函數,最後結果正確了

原因就是:

按group by分組會去掉重複的姓名,每個姓名只保留一個,默認爲第一個

加上max聚合函數後,就把張三數學,和物理的最高分給篩選出來了

其實,min,avg,sum都能實現這樣的效果(avg,sum函數會把整形轉換成float型)


發佈了44 篇原創文章 · 獲贊 5 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章