SQL乘法查询

时间:2013-01-04 14:21:38

标签: mysql sql sum

我正在尝试进行乘法求和,但似乎无法找出为什么它不起作用。 我已经找到了天数,但现在需要将其乘以每日费用。

有人可以帮忙吗?

SELECT `Daily_Charge`, DATEDIFF(End_Date,Start_Date) AS `Total`, 
`Total`*Daily_Charge AS `Done` FROM `Car`,`Contract` WHERE `Contract_Id`="1";

3 个答案:

答案 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公式。