ORA-00979,但我在GROUP BY语句中的SELECT中有元素

时间:2015-06-05 14:24:19

标签: sql oracle ora-00979

我有类似的查询:

SELECT field1,
       field2,
       field3,
       field4,
       field5,
       field6,
       field7,
       field8,
       field9,
       count(field9)
  FROM REPORT_TABLE
       LEFT JOIN
       DATAMINE
         USING (REPORT_ID)
 WHERE field1 LIKE 'MatchingText%'
   AND TS_START between to_date('2015-05-01', 'YYYY-MM-DD') and to_date('2015-06-06', 'YYYY-MM-DD') + 0.99999999
GROUP BY field9,
         1,
         2,
         3,
         4,
         5,
         6,
         7,
         8,
         9;

当我重新开始时,我得到了

ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"

我看到了this个问题,并解释说我需要在select group by中包含所有字段。我通过列号来做到这一点。

如何调整此查询以便我不会收到00979错误?

2 个答案:

答案 0 :(得分:7)

  

我已经通过列号来完成了。

这适用于像PostgreSQL这样的数据库:

SELECT

但不是在Oracle中。在Oracle中,您无法从GROUP BY子句引用SELECT abc, xyz FROM ... GROUP BY abc, xyz 子句,但必须重复完整的列表达式

[...]
GROUP BY 
    field1,
    field2,
    field3,
    field4,
    field5,
    field6,
    field7,
    field8,
    field9;

......或者在你的情况下:

setup.py

答案 1 :(得分:0)

我相信你应该能够通过非计数或聚合字段进行分组,并且不会得到错误。您可能还需要添加命名约定,因为您正在计算field9并计算它

SELECT 
field1,
field2,
field3,
field4,
field5,
field6,
field7,
field8,
field9,
count(field9)  AS "Field9_Count"
FROM REPORT_TABLE
LEFT JOIN DATAMINE
    USING (REPORT_ID)
WHERE  ( field1 LIKE 'MatchingText%') AND TS_START between to_date('2015-05-01', 'YYYY-MM-DD') and to_date('2015-06-06', 'YYYY-MM-DD')+0.99999999 
GROUP BY field1, field2, field3, field4, field5, field6, field7, field8, field9