【问题标题】:ORA-00979, but I have elements in my SELECT in my GROUP BY statementORA-00979,但我在 GROUP BY 语句中的 SELECT 中有元素
【发布时间】:2015-08-20 13:12:34
【问题描述】:

我有一个类似的查询:

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 的问题,解释说我需要在group by 中包含select 中的所有字段。我已经通过列号来做到这一点。

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

【问题讨论】:

    标签: sql oracle ora-00979


    【解决方案1】:

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

    这适用于 PostgreSQL 等数据库:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      我相信您应该能够按非计数或聚合字段进行分组而不会出错。您可能还需要添加命名约定,因为您正在计算 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
      

      【讨论】:

        猜你喜欢
        • 2017-06-20
        • 1970-01-01
        • 1970-01-01
        • 2011-06-04
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        相关资源
        最近更新 更多