1

我刚刚创建了这个查询,当我对它进行分组时我感到困惑,因为我无法将它们视为一个分组。此查询运行但不是我想要的方式,我想按团队名称对查询进行分组,但是当使用 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;

我想使用团队名称对所有这些进行分组,但是使用计数将是一个问题,因为我不知道在可以按照我想要的方式顺利运行的技术中进行分组。谢谢你。

4

1 回答 1

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,除非您的数据库中有重复的行,例如,一支球队中的一名球员在数据库中有不止一行。

于 2012-04-25T02:21:52.917 回答