ORDER BY 子句中常规字段和计算字段的乘积
Product of regular field and computed field in an ORDER BY clause
以下查询工作正常:
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
但以下会产生 ERROR; column 'd' does not exist
错误:
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
以下查询工作正常:
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
但以下会产生 ERROR; column 'd' does not exist
错误:
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