我的 SQL 查询如下:
SELECT
oh.ORDER_NUMBER, oh.CREATED_TS, stat.STATE, stat.TIMESTAMP
FROM
IMPL_OH_ORDER_HEADER oh,
SNCR_ORDER_DISPOSITION stat,
SNCR_ORDER_DISP_HEAD stathead,
IMPL_CUST_ACCOUNT cust
WHERE
stat.DISP_TRANSACTION_ID=stathead.DISP_TRANSACTION_ID
and stathead.TRANSACTION_ID=oh.TRANSACTION_ID
and oh.ACCOUNT_ID=cust.ACCOUNT_ID
and stat.CATEGORY=100
and oh.USER_ID='a'
and cust.ACCOUNT_NUM='123'
GROUP BY oh.ORDER_NUMBER
ORDER BY stat.TRX_SEQ DESC;
它给出以下错误:ORA-00979: not a GROUP BY expression
如果我删除 GROUP BY 表达式,则不会收到错误。
正确的 GROUP BY 语法是什么?
研究:谷歌搜索表明,如果使用 AGGREGATE 函数,我应该在 GROUP BY 子句中包含聚合函数未使用的所有字段。所以我尝试将 GROUP BY 表达式修改为 GROUP BY oh.ORDER_NUMBER, oh.CREATED_TS, stat.TIMESTAMP, stat.STATE
。
但是我遇到了同样的错误。
请帮忙。
最佳答案
您收到错误是因为 order by 列表中有 STAT.TRX_SEQ
。
如果将group by子句与order by子句一起使用,则必须按分组的列或聚合值进行排序。
此规则也适用于选定的值:它们是分组依据或聚合函数(或伪列)的一部分。
关于sql - ORACLE GROUP BY 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22344552/