コンテストの制限時間が終了しました。
以降も提出を行うことができますが、順位集計には反映されません。
以降も提出を行うことができますが、順位集計には反映されません。
ソースコード
with avg_tbl as (
SELECT
AVG(POINT) OVER(PARTITION BY TEST_ID) AS AVG_PT
-- -- 分散を求める
-- SUM((POINT - AVG(POINT) OVER(PARTITION BY TEST_ID)) * (POINT - AVG(POINT) OVER(PARTITION BY TEST_ID))) OVER(PARTITION BY TEST_ID) / COUNT(*) OVER(PARTITION BY TEST_ID) AS VARIANCE_PT,
-- -- 標準偏差を求める
-- SQRT(SUM((POINT - AVG(POINT) OVER(PARTITION BY TEST_ID)) * (POINT - AVG(POINT) OVER(PARTITION BY TEST_ID))) OVER(PARTITION BY TEST_ID) / COUNT(*) OVER(PARTITION BY TEST_ID)) AS STDEV_PT
FROM TEST_RESULTS
WHERE TEST_ID = '100'
), bunsan as (
SELECT
-- 分散を求める
SUM((POINT - AVG_PT) * (POINT - AVG_PT)) OVER(PARTITION BY TEST_ID) / COUNT(*) OVER(PARTITION BY TEST_ID) AS VARIANCE_PT
FROM TEST_RESULTS, avg_tbl
WHERE TEST_ID = '100'
)
SELECT
distinct USER_ID AS USER,
POINT AS PT,
ROUND(
CASE
-- 標準偏差がゼロの場合は、偏差値を50とする
WHEN SQRT(VARIANCE_PT) = 0 THEN 50
-- 標準偏差がゼロでない場合は、偏差値を算出する
ELSE (POINT - AVG_PT) * 10 / SQRT(VARIANCE_PT) + 50
END,
1 -- 小数点第2位を四捨五入
) AS DEV_VAL
FROM TEST_RESULTS, bunsan, avg_tbl
WHERE TEST_ID = '100'
AND SQRT(VARIANCE_PT) IS NOT NULL -- 総数が1の場合、標準偏差がNULLになるため除外する
ORDER BY DEV_VAL DESC, USER_ID ASC;
提出情報
提出日時 | 2023/02/18 07:26:19 |
コンテスト | 第5回 SQLコンテスト |
問題 | 偏差値の算出 |
受験者 | hiraku |
状態 (詳細) | AC (Accepted: 正答) |
メモリ使用量 | 76 MB |
メッセージ
テストケース(通過数/総数)
4/4
状態
メモリ使用量
データパターン1
AC
76 MB
データパターン2
AC
75 MB
データパターン3
AC
76 MB
データパターン4
AC
76 MB