我正在尝试对聚合列进行排序,该列包含一些零值。我需要最后的零值。
对于非聚合列,我可以这样做(简化的示例查询):

SELECT age FROM books
ORDER BY
age = 0,
age ASC

但是,对于聚合列,当列不存在时,我会得到一个错误:
SELECT avg(age) as avg_age FROM books
GROUP BY book.type
ORDER BY
avg_age = 0,
avg_age ASC

错误是:
SQLSTATE[42S22]: Column not found: 1247 Reference 'avg_age' not supported (reference to group function)
我很感激为什么会这样,但我找不到解决办法,有什么建议吗?

最佳答案

可能有一个(旧的)相关的错误报告
[2016年3月21日9:22]吉卡瓦利克
描述:当使用alias按顺序聚合列时
允许使用纯别名,在任何表达式中使用它都会返回错误。
http://sqlfiddle.com/#!9/e87bb/7
解决方法:
-选择表达式并使用其别名
-使用派生表并对外部表进行排序
如何重复:创建表t(a int);
--这些工作按x顺序从t组中选择sum(a)x;按x顺序从t组中选择sum(a)x;从t组中选择sum(a)x
按顺序按和(a)分组;
--这个错误地给出了“Reference'x'not supported(Reference to group function)”select sum(a)x from t group by a order by-x;
source
您必须编写,这更好,因为查询也是ANSI/ISO SQL标准有效的,这意味着查询很可能在大多数数据库供应商软件之间更易于移植。

SELECT
  avg(books.age) as avg_age
FROM books
GROUP BY books.type
ORDER BY
  avg(books.age) = 0
, avg(books.age) ASC

请参阅demo此错误已在MySQL 8.0中修复请参阅demo

关于mysql - MySQL的:排序聚合以零递增,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56201443/

10-16 15:04