ORDER BY expression not produced by aggregation output (missing from GROUP BY clause?)
时间: 2023-10-16 21:25:03 浏览: 124
这个错误通常是由于在 GROUP BY 语句中未列出 SELECT 语句中的某个表达式,但是 SELECT 语句中使用了聚合函数(例如SUM、COUNT、AVG、MAX、MIN等)。
具体来说,如果您的SELECT语句中使用了聚合函数,并且同时使用了ORDER BY语句,并且ORDER BY语句中的表达式不在GROUP BY语句中,就会出现这个错误。
例如,如果您的SELECT语句如下所示:
```sql
SELECT column1, COUNT(column2)
FROM table_name
GROUP BY column1
ORDER BY column2;
```
在这种情况下,ORDER BY语句中的column2不在GROUP BY语句中,因此会出现错误。解决方法是将ORDER BY语句中的表达式添加到GROUP BY语句中:
```sql
SELECT column1, COUNT(column2)
FROM table_name
GROUP BY column1, column2
ORDER BY column2;
```
这样就可以避免出现这个错误了。
相关问题
select list expression not produced by aggregation output (missing from GROUP BY clause?): asset_short_name
这个错误是因为在SELECT语句中没有将asset_short_name字段添加到GROUP BY子句中,而在SELECT语句中又使用了这个字段,导致SQL无法执行。
如果你想要同时查询asset_short_name字段和按照issuer_short_name和asset_code字段进行分组并求和,可以将asset_short_name字段添加到GROUP BY子句中,像这样:
```
SELECT asset_short_name, issuer_short_name, asset_code, TOTAL_ISSUED, next_call_day, maturity_date, SUM(settlement_nominal) AS total_settlement_nominal
FROM your_table_name
GROUP BY asset_short_name, issuer_short_name, asset_code, TOTAL_ISSUED, next_call_day, maturity_date
```
这样,就可以同时查询asset_short_name字段和对应的求和结果了。
ORALCE hash group by 和 sort group by
ORACLE数据库中的GROUP BY操作可以通过HASH GROUP BY和SORT GROUP BY两种方式实现。在10g以前,GROUP BY是通过按照GROUP BY中的列对记录进行排序实现的。而在10g以后,HASH GROUP BY通过在读取表时将聚合计算在散列表中避免了排序,理论上比SORT GROUP BY速度更快并消耗更少的内存。然而,HASH GROUP BY的初始实现存在很多bug,在11.1.0.7和10.2.0.4版本发布后基本解决了。如果遇到了和HASH GROUP BY方法相关的问题,可以尝试关闭HASH GROUP BY,通过参数_GBY_HASH_AGGREGATION_ENABLED设置为FALSE来禁用HASH GROUP BY。如果在同一个表达式中使用GROUP BY和ORDER BY,优化器通常会决定使用SORT GROUP BY(而不是HASH GROUP BY),因为SORT GROUP BY会按照顺序返回记录。在10g以前的版本,GROUP BY操作通常会按照排序的顺序返回记录,因此ORDER BY子句事实上不起什么作用。然而,从10g以后,ORDER BY会抑制HASH GROUP BY方法的使用,因此可能会降低性能。