特定の情報を取得しようとしているテーブルが 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