ソースコード
-- 中央値(median): データを大きい順に並べた時の中央の値
-- (データの件数が偶数の場合は、中央の2つの値の平均値)
WITH t1 AS (
    SELECT
        TOTAL_VALUE
        -- データを昇順に並べ、1から番号をつける
        , ROW_NUMBER() OVER(
            ORDER BY
                TOTAL_VALUE ASC
            ) AS ORDER_NUM
        -- データの個数
        , COUNT(*) OVER() AS TOTAL_DATA_NUM   -- OVER句内の指定がないので全行が対象となり、全行に対して結果がつく
    FROM
        CONVENIENCE
    WHERE
        SURVEY_YEAR = 2019
        AND
        KIND_CODE = '100'   -- 販売額
)

SELECT
    CASE WHEN TOTAL_DATA_NUM % 2 == 1   -- 奇数個: 中央の値
        THEN
            TOTAL_VALUE
        ELSE
            ROUND(AVG(TOTAL_VALUE))
    END 
    AS SA_MEDIAN
FROM
    t1
WHERE
    CASE WHEN TOTAL_DATA_NUM % 2 == 1   -- 奇数個: 中央の値
        THEN
            ORDER_NUM = (TOTAL_DATA_NUM / 2) + 1
        ELSE                            -- 偶数個: 中央の2つの値
            ORDER_NUM IN (
                TOTAL_DATA_NUM / 2
                , (TOTAL_DATA_NUM / 2) + 1
            )
    END
;
提出情報
提出日時2024/01/10 11:45:32
コンテスト第4回 SQLコンテスト
問題中央値の算出
受験者maori
状態 (詳細)AC
(Accepted: 正答)
メモリ使用量85 MB
メッセージ
テストケース(通過数/総数)
3/3
状態
メモリ使用量
データパターン1
AC
83 MB
データパターン2
AC
84 MB
データパターン3
AC
85 MB