ソースコード
SELECT RANK_AMT.都道府県コード, 都道府県名, RANK_AMT.'1位 国名', RANK_AMT.'1位 人数', RANK_AMT.'2位 国名', RANK_AMT.'2位 人数', RANK_AMT.'3位 国名', RANK_AMT.'3位 人数', 合計人数
FROM (
    SELECT 都道府県コード, 都道府県名,
        MAX(CASE WHEN AMT_RANK = 1 THEN 国名 ELSE NULL END) '1位 国名',
        MAX(CASE WHEN AMT_RANK = 1 THEN 人数 ELSE NULL END) '1位 人数',
        MAX(CASE WHEN AMT_RANK = 2 THEN 国名 ELSE NULL END) '2位 国名',
        MAX(CASE WHEN AMT_RANK = 2 THEN 人数 ELSE NULL END) '2位 人数',
        MAX(CASE WHEN AMT_RANK = 3 THEN 国名 ELSE NULL END) '3位 国名',
        MAX(CASE WHEN AMT_RANK = 3 THEN 人数 ELSE NULL END) '3位 人数'
    FROM (
        SELECT
            FOREIGNER.PF_CODE 都道府県コード,
            PF_NAME 都道府県名,
            NATION_NAME 国名,
            AMT 人数,
            RANK() OVER (
                PARTITION BY FOREIGNER.PF_CODE
                ORDER BY AMT DESC, FOREIGNER.NATION_CODE ASC
            ) AMT_RANK
        FROM FOREIGNER
            INNER JOIN PREFECTURE
                ON FOREIGNER.PF_CODE = PREFECTURE.PF_CODE
            INNER JOIN NATIONALITY
                ON FOREIGNER.NATION_CODE = NATIONALITY.NATION_CODE
        WHERE FOREIGNER.NATION_CODE != '113'
    )
    GROUP BY 都道府県コード
) RANK_AMT
INNER JOIN (
    SELECT PF_CODE 都道府県コード, SUM(AMT) 合計人数 FROM FOREIGNER
    WHERE NATION_CODE != '113'
    GROUP BY PF_CODE
) SUM_AMT
    ON RANK_AMT.都道府県コード = SUM_AMT.都道府県コード
ORDER BY 合計人数 DESC, RANK_AMT.都道府県コード ASC
提出情報
提出日時2022/07/20 17:54:32
コンテスト第1回 SQLコンテスト
問題外国籍分布
受験者toshikish
状態 (詳細)AC
(Accepted: 正答)
メモリ使用量104 MB
メッセージ
テストケース(通過数/総数)
2/2
状態
メモリ使用量
データパターン1
AC
102 MB
データパターン2
AC
104 MB