2012-09-17 114 views
1

我有一個很多板球碗的數據庫。 模式是:SQL COUNT顯示的不僅僅是計數嗎?

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 

我試圖找到在英格蘭隊每個球員得分亂七八糟的數量。 (我正在使用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部分​​(Player.Initials和Player.Surname)中的前兩列,它可以正常工作,但它不是非常有用,因爲我無法計算出世界衛生組織的所有六分數。

我跑這一切通過Java,我得到異常:

java.sql.SQLException: Not in aggregate function or group by clause 

那麼,爲什麼不這項工作?我如何在旁邊顯示名字?

回答

0

如果您使用您的查詢次數,金額等(聚合函數),所有列你檢索不在聚合中必須在group by子句中。

by子句改變你的集團成爲

GROUP BY "Player"."Initials", "Player"."Surname" 
0

SELECT子句中的任何字段需要使用聚合函數或包含在GROUP BY子句中,這就是爲什麼您會收到此錯誤。因此,您必須將"Player"."Initials", "Player"."Surname"包含在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" 
0

您的羣組應該是您未彙總的列。

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" 
1

當你在你的SELECT子句的計數(或任何聚合函數),選擇子句中的所有未聚集列必須也出現在group-by子句。

讓您GROUP BY子句是這樣的:

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

,它應該工作..

相關問題