コンテストの制限時間が終了しました。
以降も提出を行うことができますが、順位集計には反映されません。
以降も提出を行うことができますが、順位集計には反映されません。
ソースコード
/*
地区毎の学校の保険データを集計した学校保健テーブル(SCHOOL_HEALTH)より、
調査年(SURVEY_YEAR)が2019年のデータを年齢・性別ごとに身長、体重それぞれの平均値を算出して
四捨五入した値が、平均値以上の地区の割合を表示しなさい。
地区毎の集計人数は同じであるとし、各地区の平均値から全体の平均値をそのまま算出してよいものとする。
割合はパーセント表示にして、値の後に'%'を付加して表示すること。
カテゴリコード(CATEGORY_CODE)には、'10'(身長)、'20'(体重)がセットされており、
性別コード(GENDER_CODE)には、'20'(男)、'30'(女)がセットされている。
また、平均値、割合の計算結果は小数点第2位を四捨五入すること。
*/
SELECT
H.AGE AS AGE
, CASE H.GENDER_CODE
WHEN '20' THEN 'MALE'
WHEN '30' THEN 'FEMALE'
END AS GENDER
, MAX(H_AVG) AS H_AVG
, ROUND(
CAST(
COUNT(
H.CATEGORY_CODE = '10'
AND H.AVERAGE_VALUE >= WK1.H_AVG
OR NULL
) AS REAL
) / CAST(COUNT(H.CATEGORY_CODE = '10' OR NULL) AS REAL) * 100
, 1
) || '%' AS H_PER
, MAX(W_AVG) AS W_AVG
, ROUND(
CAST(
COUNT(
H.CATEGORY_CODE = '20'
AND H.AVERAGE_VALUE >= WK2.W_AVG
OR NULL
) AS REAL
) / CAST(COUNT(H.CATEGORY_CODE = '20' OR NULL) AS REAL) * 100
, 1
) || '%' AS W_PER
FROM
SCHOOL_HEALTH H
INNER JOIN
/* 身長の平均値 */
(
SELECT
AGE
, GENDER_CODE
, ROUND(AVG(AVERAGE_VALUE), 1) AS H_AVG
FROM
SCHOOL_HEALTH
WHERE
SURVEY_YEAR = 2019
AND CATEGORY_CODE = '10'
GROUP BY
AGE
, GENDER_CODE
) WK1
ON H.AGE = WK1.AGE
AND H.GENDER_CODE = WK1.GENDER_CODE
INNER JOIN
/* 体重の平均値 */
(
SELECT
AGE
, GENDER_CODE
, ROUND(AVG(AVERAGE_VALUE), 1) AS W_AVG
FROM
SCHOOL_HEALTH
WHERE
SURVEY_YEAR = 2019
AND CATEGORY_CODE = '20'
GROUP BY
AGE
, GENDER_CODE
) WK2
ON WK1.AGE = WK2.AGE
AND WK1.GENDER_CODE = WK2.GENDER_CODE
GROUP BY
H.AGE
, H.GENDER_CODE
ORDER BY
H.AGE DESC
, H.GENDER_CODE DESC
提出情報
提出日時 | 2023/08/21 11:25:40 |
コンテスト | 第8回 SQLコンテスト |
問題 | 身長と体重 |
受験者 | Geronimon |
状態 (詳細) | WA (Wrong Answer: 誤答) |
メモリ使用量 | 101 MB |
メッセージ
テストケース(通過数/総数)
0/2
状態
メモリ使用量
データパターン1
WA
99 MB
データパターン2
WA
101 MB