以下查询工作正常:
SELECT a, b, c,
(SELECT COUNT(*) AS COUNT FROM table_b WHERE field_a = p.a) AS d
FROM table_a AS p
ORDER BY b DESC
这也有效:
SELECT a, b, c,
(SELECT COUNT(*) AS COUNT FROM table_b WHERE field_a = p.a) AS d
FROM table_a AS p
ORDER BY d DESC
但是下面会产生一个错误; “d”列不存在
错误:
SELECT a, b, c,
(SELECT COUNT(*) AS COUNT FROM table_b WHERE field_a = p.a) AS d
FROM table_a AS p
ORDER BY (b * d) DESC
以上三个查询之间的唯一区别是 ORDER BY
子句。在前两个查询中,结果按 b
字段或动态 d
字段排序。在最后一个查询中,结果(应该)按 b
乘以 d
的乘积排序。
为什么在最后一个查询中,PostgreSQL 说 d
不存在,而在第二个查询中却可以毫无问题地找到它?
最佳答案
order by
clause 中的任意表达式只能由输入列组成:
Each expression can be the name or ordinal number of an output column (SELECT list item), or it can be an arbitrary expression formed from input-column values.
您需要对其进行子查询:
select *
from (select 1 as a, 2 as b) s
order by a * b
关于postgresql - ORDER BY 子句中常规字段和计算字段的乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42561442/