0

特定の情報を取得しようとしているテーブルが 2 つあります (当然のことです)。最初のテーブルseasonsは半静的データ ストレージであり、2 番目のテーブルusers_cardsはユーザーの選択を格納するために使用されます。

私が達成したいと望んでいる結果は、各シーズンを通過し、「card_total」= 10 をシーズン 1 ~ 3 に、11 をシーズンごとに割り当てます。結果は次のようになります。

SEASON_ID   |   TOTAL   |
------------ ------------
1           |   123
2           |   234
3           |   345
4           |   456

省略および関連する列/サンプル データは次のとおりです。

# `seasons`:

ID  |   ACTIVE  |   COMPLETE    |
---- ----------- ---------------
1   |   0       |   1
2   |   0       |   1
3   |   0       |   1
4   |   1       |   0
5   |   0       |   0

# `users_cards`
# DESC: this table can store up to 10 choices per user for seasons 1-3 
#       and up to 11 choices for every season thereafter.

USER_ID     |   SEASON_ID   |
------------ ---------------
1           |   1
1           |   1
2           |   1
2           |   1
1           |   2
1           |   2
1           |   2

このクエリのいくつかのバリエーションを試してみましたが、何もうまくいかないようです。このクエリは各シーズンの合計数を返しますが、上記の「card_total」に基づいていません。

SELECT
    c.season_id AS season_id,
    c.card_total AS card_total,
    c.total AS total
FROM seasons s
INNER JOIN (
    SELECT
        uc.season_id,
        COUNT(DISTINCT(user_id)) AS total,
        CASE WHEN 
                uc.season_id = 1
                OR uc.season_id = 2
                OR uc.season_id = 3
            THEN 10
            ELSE 11
        END AS card_total
    FROM users_cards uc
    GROUP BY uc.season_id
) AS c ON c.season_id = s.id
WHERE s.is_active = 1 
    OR s.is_complete = 1
4

1 に答える 1

0

あなたSUM()の周りに置きますCASE...END

于 2013-02-06T08:07:45.717 に答える