これは私の初めてのUNIONであり、これを修正して正しい出力を表示する方法がわかりません。現在、9つの出力が表示されていますが、1つのクエリから最大値を取得し、devName 'Blizzard Entertainment'のみの別のwhere句を使用したいと考えています(Randy TroyとgsExperiencePoints)。 Thomas HardyはBlizzardのゲームをプレイしないので正解ではありません。私は自分のデータベースの中で最もExpを持っているので追加されます。Unionを正しく使用する方法
現在、これは私の出力です:
SELECT
gamerFirst + ' ' + gamerLast as 'Gamer',
gsExperiencePoints
FROM GAMER as gr
INNER JOIN GAME_STAT as gs ON gr.gamerID = gs.gamerID
INNER JOIN GAME as g ON gs.gameID = g.gameID
INNER JOIN DEVELOPER as d ON g.devID = d.devID
WHERE gsExperiencePoints = (SELECT MAX(gsExperiencePoints) FROM GAME_STAT)
GROUP BY gsExperiencePoints, gamerFirst, gamerLast
UNION ALL
SELECT
gamerFirst + ' ' + gamerLast as 'Gamer',
gsExperiencePoints
FROM GAMER as gr
INNER JOIN GAME_STAT as gs ON gr.gamerID = gs.gamerID
INNER JOIN GAME as g ON gs.gameID = g.gameID
INNER JOIN DEVELOPER as d ON g.devID = d.devID
WHERE devName = 'Blizzard Entertainment'
GROUP BY gsExperiencePoints, gamerFirst, gamerLast;
ここでのアドバイス:SQLステートメントにジョインした場合、**常に**エイリアスですべてのフィールドを修飾します。どこにでも。私は、列がどのテーブルから選択されているかを知ることなく、これらのようなクエリを実際に見たいとは思わない。質問:集計関数(SUMなど)を持たないフィールドでGROUP BYを使用する理由別の値を選択することを意味しましたか?その場合は、 'GROUP BY'を使わずに' SELECT DISTINCT ... 'を実行します。 –
あなたは、実際に組合を必要としないか、必要としないように思えます。最高の経験値を持つ「Blizzard Entertainment」を選択しようとしていますか? – kicken
@kicken「Blizzard Entertainment」のゲームをプレイした人が最高の経験を持ち、彼(ランディトロイ) – Bowie