1

我有一个类似的查询:

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"

我已经看到了这个问题,解释说我需要selectgroup by. 我已经通过列号来做到这一点。

如何调整此查询以免00979出现错误?

4

2 回答 2

7

我已经通过列号来做到这一点。

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

SELECT abc, xyz
FROM ...
GROUP BY 1, 2 -- referencing abc and xyz by column number

但不是在甲骨文中。在 Oracle 中,您不能SELECT从您的子句中引用您的GROUP BY子句,但您必须再次重复完整的列表达式

SELECT abc, xyz
FROM ...
GROUP BY abc, xyz

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

[...]
GROUP BY 
    field1,
    field2,
    field3,
    field4,
    field5,
    field6,
    field7,
    field8,
    field9;
于 2015-06-05T14:27:42.803 回答
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
于 2015-06-05T14:41:58.830 回答