不是GROUP BY表达式

时间:2014-10-31 17:31:24

标签: sql database oracle expression

我正在创建以下sql查询:

SELECT B.AFLEVERING_ID,A.NAAM, COUNT(B.AFLEVERING_ID) AS aantal_keer_bekeken
FROM BEKEKENVIA B, AFLEVERING A
WHERE A.AFLEVERING_ID = B.AFLEVERING_ID
GROUP BY B.AFLEVERING_ID
ORDER BY B.AFLEVERING_ID ASC;

为什么会给它错误:

ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"
*Cause:    
*Action:
Error at Line: 42 Column: 24

为什么会这样,我该如何解决这个问题?它是Oracle SQL。

2 个答案:

答案 0 :(得分:4)

SELECT中列出的每个列都不是聚合函数结果(SUM()AVG()COUNT()MIN()MAX()等等)必须列在GROUP BY中。您已选择B.AFLEVERING_IDA.NAAM,因此您的论坛必须包含这两者。

SELECT B.AFLEVERING_ID,A.NAAM, COUNT(B.AFLEVERING_ID) AS aantal_keer_bekeken
FROM BEKEKENVIA B, AFLEVERING A
WHERE A.AFLEVERING_ID = B.AFLEVERING_ID
GROUP BY B.AFLEVERING_ID, A.NAAM
ORDER BY B.AFLEVERING_ID ASC;

答案 1 :(得分:0)

为什么会这样,我该如何解决这个问题?它是Oracle SQL。

为什么会这样: 想想数据库必须做什么 您已经要求计算所有B.Aflevering_Id由B.Aflevering_Id分组 但是你的select语句中也包含了A.Naam。由于每一行的每个A.Naam可能不同,因此数据库不知道WHICH A.Naam要返回,因为你没有按其分组

所以说数据看起来像:

1 blue
1 red
1 white
2 green
2 purple
2 pink
2 green

如果您刚刚返回每个aflvering_ID的计数,您将获得

3 1's and
2 4's

但你也说你想要A.Naam

所以数据库说我不知道​​你想要的蓝色,红色和白色中的哪一个,所以引擎会返回一个错误。

如果您将A.Naam添加到该组中,您可能无法获得所需的结果,如果您说最大或最小,您可能得到您想要的但是数据库无法弄清楚在这种情况下该怎么做没有为数据库引擎提供足够的指令以提供一致的结果。引擎知道这一点;这就是你得到错误的原因。

我该如何解决? 答案取决于所需的结果

  1. 您只需从选择
  2. 中删除A.NAAM即可
  3. 使用wm_Concat或List_Agg获取所有值的单独列表
  4. 将它添加到组中以单独返回每一行(在我的示例中,绿色2将返回计数2,其他所有其他将为1
  5. 使用min或max返回最高或最低A.Naam
  6. 其他选项也存在,但其中一个可能会解决您尝试做的事情。问题是你想要的结果是什么?