我正在尝试进行乘法求和,但似乎无法找出为什么它不起作用。 我已经找到了天数,但现在需要将其乘以每日费用。
有人可以帮忙吗?
SELECT `Daily_Charge`, DATEDIFF(End_Date,Start_Date) AS `Total`,
`Total`*Daily_Charge AS `Done` FROM `Car`,`Contract` WHERE `Contract_Id`="1";
答案 0 :(得分:5)
您只能在查询的后续子句中使用别名,而不能在select子句本身中使用别名。使用
SELECT `Daily_Charge`,
DATEDIFF(End_Date,Start_Date) AS `Total`,
DATEDIFF(End_Date,Start_Date) * Daily_Charge AS `Done`
FROM `Car`,`Contract`
WHERE `Contract_Id`='1';
答案 1 :(得分:1)
您不能在另一列定义中使用列别名,您需要再次编写公式:
SELECT `Daily_Charge`, DATEDIFF(End_Date,Start_Date) AS `Total`,
DATEDIFF(End_Date,Start_Date)*Daily_Charge AS `Done`
FROM `Car`,`Contract`
WHERE `Contract_Id`="1"
或者,您可以在子查询中执行公式,并在计算中使用这些列,例如:
SELECT `Daily_Charge`, `Total`, `Total`*Daily_Charge AS `Done`
FROM (SELECT `Daily_Charge`, DATEDIFF(End_Date,Start_Date) AS `Total`,
FROM `Car`,`Contract`
WHERE `Contract_Id`="1") as Source
答案 2 :(得分:0)
根据MySQL - Problems with Column Aliases
可以在查询选择列表中使用别名为列提供不同的名称。您可以使用 GROUP BY , ORDER BY 或 HAVING 子句中的别名来引用该列:
...
标准SQL不允许在 WHERE 子句中引用列别名。强制执行此限制是因为在评估 WHERE 子句时,可能尚未确定列值。
...
正如其他人已经指出的那样,只需复制datediff
公式。