Java SQL计数显示的不仅仅是计数?
我有很多板球碗的数据库。 架构是:Java SQL计数显示的不仅仅是计数?,java,sql,Java,Sql,我有很多板球碗的数据库。 架构是: 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
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)
这是我正在尝试运行的SQL,但它无法运行。如果我省略了SELECT部分的前两列(Player.Initials和Player.姓氏),它可以很好地工作,但它不是很有用,因为我无法计算出谁得了所有的6分
我通过java运行它,我得到一个异常:
java.sql.SQLException: Not in aggregate function or group by clause
那么为什么这不起作用呢?如何在旁边显示名称?选择子句中的任何字段都需要使用聚合函数,或者包含在
分组依据
子句中,这就是为什么会出现此错误。因此,您必须在GROUPBY
子句中包含“Player”“Initials”“Player”“姓氏”
,或者对它们使用聚合函数。比如:
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"
SELECT
子句中的任何字段都需要使用聚合函数,或者包含在GROUP BY
子句中,这就是您出现此错误的原因。因此,您必须在GROUPBY
子句中包含“Player”“Initials”“Player”“姓氏”
,或者对它们使用聚合函数。比如:
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"
您的分组依据应该是未聚合的列
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"
您的分组依据应该是未聚合的列
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"
当select子句中有count(或任何聚合函数)时,select子句中所有未聚合的列也必须出现在group by子句中
使您的分组依据子句如下所示:
GROUP BY "Bowl"."Striker", "Player"."Initials", "Player"."Surname"
当您的select子句中有一个count(或任何聚合函数)时,select子句中所有未聚合的列也必须出现在group by子句中
使您的分组依据子句如下所示:
GROUP BY "Bowl"."Striker", "Player"."Initials", "Player"."Surname"
如果在查询中使用count、sum等(聚合函数),则在聚合中检索到的所有不在聚合中的列都必须在group by子句中 将您的分组按子句更改为
GROUP BY "Player"."Initials", "Player"."Surname"
若在查询中使用count、sum等(聚合函数),则检索到的不在聚合中的所有列都必须在GROUPBY子句中 将您的分组按子句更改为
GROUP BY "Player"."Initials", "Player"."Surname"