【发布时间】:2022-11-19 11:43:56
【问题描述】:
我创建了一个 SQL 查询,它从满足两个条件之一的电影表中返回元素。它们要么是最赚钱的(总预算),要么是制作成本最低的电影。
但是,我想在查询的返回中添加一列,根据元组满足的条件来表示“最有利可图”或“最便宜”。我尝试在网上寻找解决方案;我决定尝试在查询的 SELECT 部分使用 CASE WHEN。
原始sql查询:
SELECT DISTINCT Films.title, Films.year
FROM Films,(SELECT DISTINCT (MAX(Films.gross-Films.budget))AS profit FROM Films)AS Temp1
WHERE ((Films.gross-Films.budget)=Temp1.profit) OR (Films.budget)=(SELECT DISTINCT Min(Films.budget) FROM Films)
CASE WHEN 尝试:
SELECT DISTINCT CASE WHEN Temp1.profit=Max(Temp1.profit) THEN 'most profitable' ELSE 'least expensive' END AS feature, Films.title, Films.year
FROM Films,(SELECT DISTINCT (MAX(Films.gross-Films.budget))AS profit FROM Films)AS Temp1
WHERE ((Films.gross-Films.budget)=Temp1.profit) OR (Films.budget)=(SELECT DISTINCT Min(Films.budget) FROM Films)
但是,这会出现各种错误,例如: “temp1.profit”列必须出现在 GROUP BY 子句中或用于聚合函数
我不确定为什么要问这个,但我还是尝试通过添加行来给它想要的东西
GROUP BY TEMP1.profit,Films.title,Films.year;
这使错误消失了,但现在所有行都对特征列获得了相同的“最有利可图”值,即使这不是它们存在的原因!
我不知道是否有任何方法可以使这项工作正常进行,但即使是一种完全不同的方法来使该专栏正常工作也会有很大帮助。
【问题讨论】:
-
看看CTE。
标签: sql postgresql