ソースコード
WITH SUB AS ( 
    -- 1.点数の平均値を算出
    SELECT
        AVG(POINT) AS AVERAGE 
    FROM
        TEST_RESULTS 
    WHERE
        TEST_ID = '100'
) 
, SUB2 AS ( 
    SELECT
        -- 4.標準偏差(分散の平方根)を求める
        SQRT( 
            -- 3.二乗の平均(分散)を求める
            AVG( 
                -- 2.個々の点数と平均値の差の二乗を求める
                (T.POINT - SUB.AVERAGE) * (T.POINT - SUB.AVERAGE)
            )
        ) AS STANDARD_DEVIATION 
    FROM
        TEST_RESULTS AS T 
        -- 求めた平均値を交差結合し計算に使用する
        CROSS JOIN SUB 
    WHERE
        TEST_ID = '100'
) 
SELECT
    USER_ID AS USER
    , POINT AS PT
    , CASE 
        WHEN STANDARD_DEVIATION <> 0 
            THEN ROUND( 
            -- 5.個々の点数と平均値の差に10を掛ける
            -- 6.上記の値を標準偏差で割る
            (((POINT - AVERAGE) * 10) / STANDARD_DEVIATION)
            , 1
        -- 7.標準偏差で割った値に50を足す
        ) + 50 
        -- 標準偏差が0の場合は一律で偏差値は50となる
        ELSE 50 
        END AS DEV_VAL 
FROM
    TEST_RESULTS 
    CROSS JOIN SUB 
    CROSS JOIN SUB2 
WHERE
    TEST_ID = '100' 
ORDER BY
    DEV_VAL DESC
    , USER_ID ASC;
提出情報
提出日時2023/02/10 10:57:15
コンテスト第5回 SQLコンテスト
問題偏差値の算出
受験者admin
状態 (詳細)AC
(Accepted: 正答)
メモリ使用量78 MB
メッセージ
テストケース(通過数/総数)
4/4
状態
メモリ使用量
データパターン1
AC
75 MB
データパターン2
AC
78 MB
データパターン3
AC
77 MB
データパターン4
AC
78 MB