这是我要写的一个查询:
SELECT I.*,
IF(MAX(B.`amount`) != 0, MAX(B.`amount`), I.`start`) AS `current_bid`,
`current_bid` * 1.05 AS `min_bid`
...
我收到错误“未知列'current_bid'”。我假设它是因为我之前在行中创建了当前列。无论如何,我可以按照我想要的方式使这个查询工作吗?我想让它发挥作用的一种方法是使用两个基本相同的if语句,如下所示:
SELECT I.*,
IF(MAX(B.`amount`) != 0, MAX(B.`amount`), I.`start`) AS `current_bid`,
IF(MAX(B.`amount`) != 0, MAX(B.`amount`) * 1.05, I.`start` * 1.05) AS `min_id`
...
但这似乎非常低效。
另外,有没有办法在不计算current
两次的情况下分配MAX(B.amount)
?
答案 0 :(得分:2)
SELECT
C.CURRENT_BID,
C.CURRENT_BID * 1.05 AS MIN_BID
FROM
(
SELECT MAX(B.AMOUNT) AS CURRENT_BID FROM ...
) C
我很确定首先执行嵌套查询,以便您可以使用他们的结果。而同一查询中的不同列被视为并发,因此您不能使它们彼此依赖。
答案 1 :(得分:0)
您不能在另一列中引用current_bid
或任何别名列。有两种方法可以继续:
在后一种情况下,您应该执行以下操作:
select current_bid from (
IF(MAX(B.`amount`) != 0, MAX(B.`amount`), I.`start`) AS `current_bid`...
) s
我想强调派生表将执行所有行的扫描,效率会降低。大多数情况下,最好复制公式。
PS:如果您要选择第一个选项,请注意您可以这样写下第二个IF
:
IF(MAX(B.`amount`) = 0, I.`start`, MAX(B.`amount`)) * 1.05 `min_id`
哪个更具可读性。