MySQL 行列轉換

最近在慕課上 看MySQL教程 裏面關於行轉列的教程不錯 貼上練習SQL 做個記錄
簡單行轉列

SELECT
    a.user_name,
    sum(b.kills)
FROM
    user1 a
JOIN user_kills b ON a.id = b.user_id
GROUP BY
    user_name;

CROSS JOIN 行列轉換

select * from (
    SELECT
        sum(kills) AS '孫悟空'
    FROM
        user1 a
    JOIN user_kills b ON a.id = b.user_id
    AND a.user_name = '孫悟空'
) a
CROSS JOIN (
    SELECT
        sum(kills) AS '沙甥'
    FROM
        user1 a
    JOIN user_kills b ON a.id = b.user_id
    AND a.user_name = '沙甥'
) b
CROSS JOIN (
    SELECT
        sum(kills) AS '豬八戒'
    FROM
        user1 a
    JOIN user_kills b ON a.id = b.user_id
    AND a.user_name = '豬八戒'
) c;
case行列轉換
SELECT
    sum(
        CASE
        WHEN user_name = '孫悟空' THEN
            kills
        END
    ) AS '孫悟空',
    sum(
        CASE
        WHEN user_name = '沙甥' THEN
            kills
        END
    ) AS '沙甥',
    sum(
        CASE
        WHEN user_name = '豬八戒' THEN
            kills
        END
    ) AS '豬八戒'
FROM
    user1 a
JOIN user_kills b ON a.id = b.user_id;

單列轉多行

SELECT
    user_name,
    REPLACE (
        substring(
            substring_index(mobile, ',', a.id),
            CHAR_LENGTH(
                SUBSTRING_INDEX(mobile, ',', a.id - 1)
            ) + 1
        ),
        ',',
        ''
    ) AS mobile
FROM
    tb_sequence a
CROSS JOIN (
    SELECT
        user_name,
        CONCAT(mobile, ',') AS mobile,
        LENGTH(mobile) - LENGTH(REPLACE(mobile, ',', '')) + 1 size
    FROM
        user1 b
) b ON a.id <= b.size;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章