postgresql - ORDER BY 子句中常​​规字段和计算字段的乘积

标签 postgresql sql-order-by

以下查询工作正常:

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/

相关文章:

MYSQL 分组依据 + ORDER BY 字段()

sql - 使用另一个查询的输出动态执行查询

mysql - 使用 zend 框架编写 mysql 查询

MYSQL - 排序时间戳值按顺序升序,从最新到最旧?

postgresql - 从开始时间戳开始每 3 分钟选择一次数据

mysql 选择最后 3 个不同的行,但按 asc 排序

java - 使用 JPA 在 jpql 中按时间戳进行分组

postgresql - POSTGRES 中的 numeric(9,0) 和 int 有什么区别?

django - 当一个对象可以属于其他几个对象时,外键属于哪里?

sql - 如何查看PostgreSQL中是否已有本月的记录?