記錄一個sql

么零小柒發表於2018-05-17

這裡寫圖片描述
其中sex為1表示男性,2表示女性,population是地區人口。
要想獲得下面格式的資料:
這裡寫圖片描述

首先,目的資料明顯是按照性別分組的,但是要轉成漢字“男”和“女”,所以使用CASE子句來轉義sex列的內容:

CASE 
 WHEN sex = 1 THEN '男'
 ELSE '女'
 END AS '性別'

然後根據轉義的內容進行分組,因為CASE子句可以存在於GROUP BY子句中,所以:

GROUP BY CASE 
          WHEN sex = 1 THEN '男'
          ELSE '女'
         END

表分組之後是這樣的:
這裡寫圖片描述

然後就可以根據分組後的資料進行聚合函式。

SELECT CASE 
        WHEN sex = 1 THEN '男'
        ELSE '女'
    END AS '性別', SUM(population) AS '全國', MAX(CASE 
        WHEN pref_name = '德島' THEN population
        ELSE 0
    END) AS '德島'
    , MAX(CASE 
        WHEN pref_name = '香川' THEN population
        ELSE 0
    END) AS '香川', MAX(CASE 
        WHEN pref_name = '愛媛' THEN population
        ELSE 0
    END) AS '愛媛'
    , MAX(CASE 
        WHEN pref_name = '高知' THEN population
        ELSE 0
    END) AS '高知', SUM(CASE 
        WHEN pref_name IN ('德島', '香川', '愛媛', '高知') THEN population
        ELSE 0
    END) AS '四國(再揭)'
FROM poptbl2
GROUP BY CASE 
        WHEN sex = 1 THEN '男'
        ELSE '女'
    END;

相關文章