1. ホーム
  2. sql

[解決済み] SQLで複数のGROUP BYを使用する場合とは?

2022-02-08 10:27:19

質問

SQLZOOでSQLを練習しているのですが、Joinをやっています。その中の質問11で、"「POL」が関与するすべての試合について、matchid、日付、得点数を表示せよ、という質問があります。

そこで、次のようなコードを試してみました。

SELECT matchid, mdate, COUNT(player)
FROM goal JOIN game ON matchid = id 
WHERE (team1 = 'POL' OR team2 = 'POL')
GROUP BY matchid

しかし、エラーを投げます。

'gisq.game.mdate' が GROUP BY に含まれていません。

ということは、答えは

SELECT matchid, mdate, COUNT(player)
FROM goal JOIN game ON matchid = id 
WHERE (team1 = 'POL' OR team2 = 'POL')
GROUP BY matchid, mdate

質問ですが、集計関数の一部ではないのに、なぜGROUP BY句にmdateも含める必要があるのでしょうか?ありがとうございます、そして初心者の質問ですみません。以下はテーブルの書式です。 https://sqlzoo.net/wiki/The_JOIN_operation

解決方法は?

クエリの SELECT 部分で集約および集約関数(COUNT、MAX、MIN、AVG など)を直接(集約されていない)列とともに使用する場合、クエリの GROUP BY 部分で SELECT 部分から集約されていないすべての列を繰り返すことが必須となります。結果として、そしてこれが要求されていることです。 すべてのカラムが集約される そのうちのいくつかはクエリの SELECT 部分で集約関数によって、残りは GROUP BY 句で集約されます。