我刚创建了这个查询,但是当我将其分组时,我感到困惑,因为我无法将它们视为一个分组。这个查询运行但不是我想要的方式,我想按团队名称对查询进行分组,但是当使用count(*)计算查询并且其计数结果产生相同的数字时,会出现问题,
SELECT TEAM.NAMATEAM, PERSONAL.KODEPERSON
FROM TEAM, PERSONAL
WHERE TEAM.KODETEAM = PERSONAL.KODETEAM
GROUP BY PERSONAL.KODEPERSON, TEAM.NAMATEAM
MINUS
SELECT TEAM.NAMATEAM, PERSONAL.KODEPERSON
FROM TEAM, PERSONAL, AWARD_PERSON
WHERE TEAM.KODETEAM = PERSONAL.KODETEAM
AND AWARD_PERSON.PEMENANG = PERSONAL.KODEPERSON
GROUP BY TEAM.NAMATEAM, PERSONAL.KODEPERSON;
我想使用团队名称对所有这些进行分组,但是使用计数会有问题,因为我不知道如何能够按照我想要的顺利运行技术进行分组。谢谢。
答案 0 :(得分:0)
我理解你的问题吗?您正在尝试创建NAMATEAM,X列表,其中NAMATEAM是团队名称,X是每个团队中没有奖励的人数(在AWARD_PERSON中列出)。如果是这样,您应该能够使用子选择:
SELECT T_NAME, COUNT(*)
FROM (
SELECT TEAM.NAMATEAM "T_NAME", PERSONAL.KODEPERSON
FROM TEAM, PERSONAL
WHERE TEAM.KODETEAM = PERSONAL.KODETEAM
MINUS
SELECT TEAM.NAMATEAM "T_NAME", PERSONAL.KODEPERSON
FROM TEAM, PERSONAL, AWARD_PERSON
WHERE TEAM.KODETEAM = PERSONAL.KODETEAM
AND AWARD_PERSON.PEMENANG = PERSONAL.KODEPERSON )
-- your original query without the GROUP BYs
GROUP BY T_NAME
第一个子选择SELECT创建一个完整的玩家列表,第二个子选择SELECT创建一个赢得奖励的玩家列表(我假设),MINUS从完整列表中删除获奖者。因此,对于没有奖励的所有玩家,完整的子选择会返回玩家及其团队的列表。
然后主要的SELECT仅对团队名称进行总结,以产生每个团队没有奖励的玩家数量。
您不应该需要原始GROUP BY TEAM.NAMATEAM,PERSONAL.KODEPERSON,除非您的数据库中有重复的行,例如,一个团队中的一个玩家在数据库中有多个行。