MySQL中關於將列值轉換爲列名


咱們有時候會有這種需求:
image.png
這種與列值相關的展現有時候很是具備數據的直觀性,我將用一個小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

MySQL提供了條件分支語法(相似於if/else、case...)

語法:
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;
執行結果:

image.png


總結:

經過上面的sql語句咱們實現了行值到列名的轉換,咱們借用了聚合函數來與條件分支實現了此操做,其中course='語文'爲條件判斷,而score爲實際要展現的數據字段,若是條件不成立則輸出爲0,聚合函數的使用並不嚴謹,其實avg函數也能夠是其餘的聚合函數。blog

相關文章
相關標籤/搜索