ORA-00979 Group by 子句错误

ORA-00979 Group by 子句错误

我正在尝试执行 SQL 命令

select distinct T1.dbid,T1.id,T6.user_name,T6.action_name,T6.action_timestamp,T2.filename from promotion T1,history T6,attachments T2 where T1.dbid = T6.entity_dbid and 16777433 = T6.entitydef_id and T1.dbid = T2.entity_dbid (+) and 16777962 = T2.entity_fielddef_id (+) and (T1.dbid <> 0 and ((T6.action_name = 'Add-Comments-Attachments' and T6.action_timestamp between to_date('2021-03-24 00:00:00', 'YYYY-MM-DD HH24:MI:SS') and to_date('2022-03-23 23:59:59', 'YYYY-MM-DD HH24:MI:SS')))) group by T1.dbid order by T1.id ASC ,T6.action_timestamp ASC

这给了我ORA 00979错误信息,我不知道该如何解决它。我尝试使用STRING_AGG(T1.id, ',')asT1.id 等... 即每个变量(列),就像我在某处看到的那样,但还是徒劳无功。我希望得到的结果是将行数缩小到 1,这将把第 1 列中的行组合在一起(T1.id)并在 1 行中列出每列的结果。有什么想法如何解决它?

答案1

据我所知,ORA-00979 的意思是“不是 GROUP BY 表达式”。

并且“group by”子句应该包含“select”子句中的所有表达式,但这不是您的情况。

我建议先修复这个问题。

来源 : http://www.dba-oracle.com/t_ora_00979_not_a_group_by_expression.htm

答案2

您必须将 SELECT 的所有列放入 GROUP BY 中。未包含在 GROUP BY 中的列必须使用组函数,以便它们可以给出单个值(COUNT、MIN、MAX、SUM、SVG)。

举个例子,下面是这个简单的数据库表:

FOO BAR
0   11
0   22

并执行命令:

SELECT * FROM table GROUP BY FOO 

结果必须是单行。

现在我们知道第一列FOO必须包含0GROUP BY,但对于第二列,BAR现在有两个值可供选择。您期望第二列的结果是 11 还是 22?

这可以通过为第二列分配一个组函数来解决,例如:

SELECT FOO, SUM(BAR) FROM table GROUP BY FOO

现在结果是一行,其值为“(0,33)”。

相关内容