ソースコード
SELECT
    ROUND(AVG(TOTAL_VALUE)) AS SA_MEDIAN 
FROM
    ( 
        SELECT
            CV1.TOTAL_VALUE 
        FROM
            CONVENIENCE AS CV1 
            INNER JOIN CONVENIENCE AS CV2 
                ON CV2.SURVEY_YEAR = 2019 
                AND CV2.KIND_CODE = '100' 
        WHERE
            CV1.SURVEY_YEAR = 2019 
            AND CV1.KIND_CODE = '100' 
        GROUP BY
            CV1.TOTAL_VALUE 
        HAVING
            -- 自分より大きな値を持つ行数と、小さな値を持つ行数の両方の条件を満たすとHAVING句の条件が成り立つ
            CASE MOD(COUNT(*), 2) 
                -- データ件数が偶数の場合                
                -- 「>= COUNT(*) / 2」で件数を判断し大きな値と小さな値の共通部分を対象とする
                WHEN 0 THEN SUM( 
                    CASE 
                        WHEN CV2.TOTAL_VALUE >= CV1.TOTAL_VALUE 
                            THEN 1 
                        ELSE 0 
                        END
                ) >= COUNT(*) / 2 
                AND SUM( 
                    CASE 
                        WHEN CV2.TOTAL_VALUE <= CV1.TOTAL_VALUE 
                            THEN 1 
                        ELSE 0 
                        END
                ) >= COUNT(*) / 2 
                -- データ件数が奇数の場合
                -- 「> COUNT(*) / 2 」で件数を判断して1件のみ対象とする
                ELSE SUM( 
                    CASE 
                        WHEN CV2.TOTAL_VALUE >= CV1.TOTAL_VALUE 
                            THEN 1 
                        ELSE 0 
                        END
                ) > COUNT(*) / 2 
                AND SUM( 
                    CASE 
                        WHEN CV2.TOTAL_VALUE <= CV1.TOTAL_VALUE 
                            THEN 1 
                        ELSE 0 
                        END
                ) > COUNT(*) / 2 
                END
    );
提出情報
提出日時2022/12/08 16:50:08
コンテスト第4回 SQLコンテスト
問題中央値の算出
受験者admin
状態 (詳細)AC
(Accepted: 正答)
メモリ使用量78 MB
メッセージ
テストケース(通過数/総数)
3/3
状態
メモリ使用量
データパターン1
AC
78 MB
データパターン2
AC
78 MB
データパターン3
AC
76 MB