我遇到一个问题,说“总计”是我的where子句上的无效标识符。我想使用“总计”并将其与在在此处插入代码部分中确定的另一个数字进行比较,但无法弄清楚如何正确设置where的第一部分。
像我一样命名列时,要在何处使用该列时不使用名称吗?
SELECT desc, TO_CHAR(SUM(price * quantity), '99999.00') AS "total amount"
FROM items i
JOIN line_items li
ON i.item_id = li.item_id
WHERE "total amount" >
(*insert code here*);
答案 0 :(得分:1)
首先,您需要一个having
子句,而不是一个where
原因。
第二,您的查询缺少group by
。
第三,您不能在Oracle的where
或having
中使用列别名。相反,您需要重复该表达式,使用子查询或使用CTE。
对于此示例,我建议:
SELECT i.desc,
TO_CHAR(SUM(i.price * li.quantity), '99999.00') AS "total amount"
FROM items i JOIN
line_items li
ON i.item_id = li.item_id
GROUP BY i.desc
HAVING SUM(i.price * li.quantity) > ?;
注意:
?
用于比较值或表达式。GROUP BY
。desc
是列的 really 坏名,因为它是一个SQL关键字(请考虑ORDER BY
)。"total amount"
上进行比较,因为它是一个字符串,并且(毫无疑问)您希望对数字进行比较(所以10 > 9
但'10' < '9'
。 答案 1 :(得分:0)
派生值应始终放在方括号中。
SELECT * FROM
(
SELECT desc, TO_CHAR(SUM(price * quantity), '99999.00') AS "total amount"
FROM items i
JOIN line_items li ON i.item_id = li.item_id
) AMT
WHERE "total amount" > '' /* YOUR VALUE HERE */