ソースコード
-- 誤答数
WITH PENALTY AS(
    SELECT
        S.ENTRY_ID
        ,COUNT(SUBMIT_ID) AS WRONG_ANS
    FROM
        SUBMISSIONS AS S
        INNER JOIN(
            SELECT
                ENTRY_ID
                ,PROBLEM_ID
                ,MAX(SUBMITTED_AT) AS LAST_SUBMITTED_AT
            FROM
                SUBMISSIONS
            WHERE
                STATUS = 'AC'
                AND ENTRY_ID IS NOT NULL
                AND CONTEST_ID = 2
            GROUP BY
                ENTRY_ID
                ,PROBLEM_ID
        ) AS SUB1
            ON S.ENTRY_ID = SUB1.ENTRY_ID
            AND S.PROBLEM_ID = SUB1.PROBLEM_ID
            AND S.SUBMITTED_AT < SUB1.LAST_SUBMITTED_AT
    GROUP BY
        S.ENTRY_ID
)
,SCORE_AND_TIME AS(
    SELECT
        ENTRY_ID
        ,SUM(POINT) AS POINT
        ,MAX(SUBMITTED_AT) AS LAST_SUBMITTED_AT
    FROM
        SUBMISSIONS AS S
    WHERE
        STATUS = 'AC'
        AND ENTRY_ID IS NOT NULL
        AND CONTEST_ID = 2
    GROUP BY
        ENTRY_ID
)
SELECT
    RANK() OVER(
        ORDER BY
            POINT DESC
            ,STRFTIME('%s', LAST_SUBMITTED_AT) - STRFTIME('%s', STARTED_AT) + 5 * 60 * IFNULL(WRONG_ANS, 0) ASC
    ) AS RANK
    ,E.USER_ID AS USER_ID
    ,POINT AS POINT
    ,STRFTIME('%s', LAST_SUBMITTED_AT) - STRFTIME('%s', STARTED_AT) + 5 * 60 * IFNULL(WRONG_ANS, 0) AS EX_TIME
    ,IFNULL(WRONG_ANS, 0) AS WRONG_ANS
FROM
    ENTRIES AS E
    LEFT OUTER JOIN PENALTY AS P
        ON E.ENTRY_ID = P.ENTRY_ID JOIN SCORE_AND_TIME AS SAT
            ON E.ENTRY_ID = SAT.ENTRY_ID
WHERE
    E.CONTEST_ID = 2
ORDER BY
    RANK ASC
    ,WRONG_ANS ASC
    ,USER_ID ASC;
提出情報
提出日時2024/03/07 18:24:26
コンテスト第3回 SQLコンテスト
問題順位計算
受験者citrus_sudachi
状態 (詳細)AC
(Accepted: 正答)
メモリ使用量85 MB
メッセージ
テストケース(通過数/総数)
2/2
状態
メモリ使用量
データパターン1
AC
85 MB
データパターン2
AC
85 MB