1

私はたくさんのクリケットボウルのデータベースを持っています。スキーマは次のとおりです。

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

では、なぜこれが機能しないのですか?また、名前を横に表示するにはどうすればよいですか?

4

4 に答える 4

1

select句にcount(または任意の集計関数)がある場合、select-clauseのすべての非集計列もgroup-by句に表示される必要があります。

グループのby-clauseを次のようにします。

GROUP BY "Bowl"."Striker", "Player"."Initials", "Player"."Surname"

そしてそれは動作するはずです。

于 2012-09-17T14:57:02.307 に答える
0

句のフィールドはSELECT、集計関数を使用するか、GROUP BYこのエラーが発生する理由である句に含まれている必要があります。したがって、句に"Player"."Initials", "Player"."Surname"inを含めるか、それらで集計関数を使用する必要があります。GROUP BY何かのようなもの:

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", "Player"."Initials", "Player"."Surname"
于 2012-09-17T14:56:30.490 に答える
0

group byは、集約されていない列である必要があります。

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 "Player"."Initials", "Player"."Surname"
于 2012-09-17T14:56:33.753 に答える
0

クエリでcount、sumなど(集計関数)を使用する場合、集計に含まれていない、取得するすべての列はgroupby句に含まれている必要があります。

groupby句を次のように変更します

GROUP BY  "Player"."Initials", "Player"."Surname"
于 2012-09-17T15:02:48.627 に答える