ソースコード
WITH AVG_TBL AS ( 
   -- 年齢、性別毎に身長と体重の平均値を算出
    SELECT
        AGE
        , GENDER_CODE
          -- ROUND関数で小数点第2位を四捨五入
        , ROUND( 
            AVG( 
                -- カテゴリコードが10(身長)のデータが対象
                CASE CATEGORY_CODE 
                    WHEN 10 THEN AVERAGE_VALUE 
                    END
            ) 
            , 1
        ) H_AVG
        , ROUND( 
            AVG( 
                -- カテゴリコードが20(体重)のデータが対象
                CASE CATEGORY_CODE 
                    WHEN 20 THEN AVERAGE_VALUE 
                    END
            ) 
            , 1
        ) W_AVG 
    FROM
        SCHOOL_HEALTH 
    WHERE
        SURVEY_YEAR = 2019 
    GROUP BY
        AGE
        , GENDER_CODE
) 
SELECT
    AVG_TBL.AGE
      -- CASE句で性別の表示内容を振分け
    , CASE AVG_TBL.GENDER_CODE 
        WHEN 20 THEN 'MALE' 
        ELSE 'FEMALE' 
        END GENDER
    , MAX(H_AVG) H_AVG
      -- 計算結果を四捨五入
    , ROUND( 
        -- 平均値以上の件数をカウント(100.0を掛けて小数点以下の計算を可能とする)
        100.0 * COUNT( 
            CASE 
                WHEN SH.CATEGORY_CODE = 10 
                AND H_AVG <= SH.AVERAGE_VALUE 
                    THEN 1 
                END
       -- カテゴリコードが身長のデータの全件をカウント
        ) / COUNT(CASE WHEN SH.CATEGORY_CODE = 10 THEN 1 END)
        , 1
    -- %を結果に付加
    ) || '%' H_PER
    , MAX(W_AVG) W_AVG
    -- 体重も身長と同様に計算
    , ROUND( 
        100.0 * COUNT( 
            CASE 
                WHEN SH.CATEGORY_CODE = 20 
                AND W_AVG <= SH.AVERAGE_VALUE 
                    THEN 1 
                END
        ) / COUNT(CASE WHEN SH.CATEGORY_CODE = 20 THEN 1 END)
        , 1
    ) || '%' W_PER 
FROM
    AVG_TBL 
    -- 学校保健データを外部結合して比較する平均値を取得
    LEFT OUTER JOIN SCHOOL_HEALTH AS SH 
        ON AVG_TBL.AGE = SH.AGE 
        AND AVG_TBL.GENDER_CODE = SH.GENDER_CODE 
        AND SURVEY_YEAR = 2019 
GROUP BY
    AVG_TBL.AGE
    , AVG_TBL.GENDER_CODE 
ORDER BY
    AVG_TBL.AGE DESC
    , AVG_TBL.GENDER_CODE DESC;
提出情報
提出日時2023/08/21 16:02:02
コンテスト第8回 SQLコンテスト
問題身長と体重
受験者akt_3310
状態 (詳細)AC
(Accepted: 正答)
メモリ使用量88 MB
メッセージ
テストケース(通過数/総数)
2/2
状態
メモリ使用量
データパターン1
AC
79 MB
データパターン2
AC
88 MB