我正在尝试对包含一些零值的聚合列进行排序。我需要零值是最后一个。
对于非聚合列,我可以执行以下操作(简化示例查询):
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)
我完全感谢为什么发生这种情况,但是找不到任何解决方法,没有任何提示吗?
答案 0 :(得分:1)
接缝处会有一个(旧的)相关的错误报告
[2016年3月21日9:22]JiříKavalík
描述:仅使用别名来汇总ORDER BY中的列时 允许使用纯别名,在任何表达式中使用它都会返回错误。
http://sqlfiddle.com/#!9/e87bb/7
解决方法: -选择表达式并使用其别名 -使用派生表并排序外部表
如何重复:创建表t(a int); -这些工作按x的顺序从t组中选择sum(a)x;从t组按sum(a)的顺序选择sum(a)x;从t中选择sum(a)x 按-sum(a)的顺序分组;
-错误地给出了“不支持参考'x'(参考组功能)”,按-x的顺序从t组中选择sum(a)x;
您必须编写,这样做会更好,因为查询然后也是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
答案 1 :(得分:0)
尝试重复代码
SELECT avg(age) as avg_age
FROM books
GROUP BY book.type
ORDER BY avg(age) = 0, avg(age) ASC