我在Postgres数据库中有一个包含6到7列的表。
对于表格中的每一行,我必须获得两列col1
和col2
的乘积,并按结果排序(降序)。
我尝试过以下事情,但没有得到我期望的结果......
首先:
SELECT SUM(col1 * col2) AS res
FROM movies_b order by res desc;
但是这为所有行提供了一个值。
第二
SELECT col3, col4, col5, col6, SUM(col1 * col2) AS res
FROM table
ORDER BY res DESC
但这失败了,错误:
错误:列“table.col3”必须出现在GROUP BY子句中或者是 用于聚合函数
我想获取每一行的所有列的值,并按两列的乘积降序排序。
我希望我很清楚。
答案 0 :(得分:1)
你出错的地方是尝试使用像SUM
这样的聚合函数。如果您使用SUM
,它会将每行的结果相加并返回该单个数字(您发现的数字)。
您想要的并不涉及实际聚合来自多行的任何数据。您要做的只是按col1*col2
的结果订购。
以下是一个示例查询:
SELECT col1, col2, col3, col4, (col1*col2) AS product
FROM movies_b
ORDER BY (col1*col2) DESC
如果需要,您甚至可以删除SELECT
行的最后一部分,只需确保将(col1*col2)
保留在ORDER BY
部分。
SQL小提琴是up here。