コンテストの制限時間が終了しました。
以降も提出を行うことができますが、順位集計には反映されません。
以降も提出を行うことができますが、順位集計には反映されません。
ソースコード
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
, MAX(W_AVG) W_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
-- 体重も身長と同様に計算
, 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/10 13:53:08 |
コンテスト | 第8回 SQLコンテスト |
問題 | 身長と体重 |
受験者 | admin |
状態 (詳細) | AC (Accepted: 正答) |
メモリ使用量 | 86 MB |
メッセージ
テストケース(通過数/総数)
2/2
状態
メモリ使用量
データパターン1
AC
86 MB
データパターン2
AC
84 MB