私はたくさんのクリケットボウルのデータベースを持っています。スキーマは次のとおりです。
Player(PlayerID, Initials, Surname)
- Stores all the players
Bowl(BowlID, Striker, Non-Striker, Bowler, Runs)
- Stores info for every ball
Team(TeamID, name)
- Stores all the teams
SquadPlayer(TeamID, PlayerID, MatchID)
- Stores a record of who was playing at each match and for which team
イングランドチームの各選手が得点した6の数を見つけようとしています。(私はopenofficeスタイルのHSQLを使用しています)
SELECT "Player"."Initials", "Player"."Surname", COUNT ("Bowl"."Striker") AS "No. Sixes"
FROM "Bowl", "Player", "Player" AS "Bowler"
WHERE "Bowl"."Striker" = "Player"."PlayerID"
AND "Bowl"."Bowler" = "Bowler"."PlayerID"
AND "Bowl"."Striker" IN (
SELECT DISTINCT "Player"."PlayerID"
FROM "Player", "Team", "SquadPlayer"
WHERE "Player"."PlayerID" = "SquadPlayer"."PlayerID"
AND "Team"."TeamID" = "SquadPlayer"."TeamID"
AND "Team"."Name" = 'England' )
AND "Bowl"."Runs" = '6'
GROUP BY "Bowl"."Striker"
これは私が実行しようとしているSQLですが、機能しません。SELECT部分の最初の2つの列(Player.InitialsとPlayer.Surname)を省略すると、正常に機能しますが、WHOが6つすべてのスコアを計算できないため、あまり役に立ちません。
私はそれをすべてJavaで実行していますが、例外が発生します。
java.sql.SQLException: Not in aggregate function or group by clause
では、なぜこれが機能しないのですか?また、名前を横に表示するにはどうすればよいですか?