子供、おもちゃ、ゲームの3つのテーブル設定があり、それぞれに固有の主キーid_kid、id_toy、id_gameがあります。各子供は複数のおもちゃやゲームを持つことができますが、各おもちゃやゲームは1人の子供だけが所有しています。
おもちゃとゲームには、3つの状態の購入済み列があります:-1,0,1テーブル構造は次のようになります:
kids
id_kid
kid_name
etc
games
id_game
id_kid_games --> links with id_kid in kids_table (maybe not the best name, I know)
game_name
bought --> can be -1,0,1
toys
id_toy
id_kid_toys --> links with id_kid in kids_table
toy_name
bought --> can be -1,0,1
以下のクエリを使用して、子供ごとに、購入したおもちゃと購入していないおもちゃの合計を取得しようとしていますが、結果は2倍になります。
SELECT kids.*,
COUNT(DISTINCT toys.id_toy) AS total_toys,
SUM(CASE toys.bought WHEN 1 THEN 1 ELSE 0 END) AS toys_bought,
SUM(CASE toys.bought WHEN -1 THEN 1 ELSE 0 END) AS toys_not_bought,
COUNT(DISTINCT games.id_game) AS total_games,
SUM(CASE games.bought WHEN 1 THEN 1 ELSE 0 END) AS games_bought,
SUM(CASE games.bought WHEN -1 THEN 1 ELSE 0 END) AS games_not_bought
FROM kids as k
LEFT JOIN toys t ON k.id_kid = t.id_kid_toys
LEFT JOIN games g ON k.id_kid = g.id_kid_games
GROUP BY k.id_kid
ORDER BY k.name ASC
1人の子供が2つのおもちゃと4つのゲームを持っていて、すべて購入しました。結果は、合計2つのおもちゃ(正しい)、合計4つのゲーム(正しい)、8つのおもちゃを購入、8つのゲームを購入しました。(両方とも間違っている)
副選択を使用せずに、可能であれば、答えを手伝ってください。ありがとうございました。