咱們有時候會有這種需求:
這種與列值相關的展現有時候很是具備數據的直觀性,我將用一個小Demo來實現此類操做。sql
create table demo1( sname varchar(20) not null comment '學員', course varchar(10) not null comment '科目', score float not null comment '成績' )
插入以下數據:函數
sname | course | score |
---|---|---|
張三 | 語文 | 100 |
張三 | 數學 | 90 |
張三 | 英語 | 80 |
李四 | 語文 | 90 |
李四 | 數學 | 70 |
李四 | 英語 | 100 |
語法:
1.case key when 條件 then 結果 when 條件 then 結果 …else key(默認爲原來的)end
2.if(做爲列的字段 = '值', 要展現的數據字段,另外的值)spa
上代碼:code
select sname '姓名', max(if(course = '語文', score,0)) '語文', avg(case course when '數學' then score end) '數學', max(if(course = '英語',score,0)) '英語' from demo1 group by sname;
經過上面的sql語句咱們實現了行值到列名的轉換,咱們借用了聚合函數來與條件分支實現了此操做,其中course='語文'爲條件判斷,而score爲實際要展現的數據字段,若是條件不成立則輸出爲0,聚合函數的使用並不嚴謹,其實avg函數也能夠是其餘的聚合函數。blog