【问题标题】:SQL Multiplication querySQL 乘法查询
【发布时间】:2013-01-04 14:21:38
【问题描述】:

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

谁能帮忙?

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

【问题讨论】:

  • Car 和 Contract 之间没有什么连接条件?

标签: mysql sql sum


【解决方案1】:

您只能在查询的后面的子句中使用别名,而不能在 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';

【讨论】:

  • 谢谢,快到了:P
  • +1 谢谢!学到了新东西! :)
【解决方案2】:

您不能在另一个列定义中使用列别名,您需要重新编写公式:

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

【讨论】:

    【解决方案3】:

    根据MySQL - Problems with Column Aliases

    可以在查询选择列表中使用别名来为列指定不同的名称。您可以在 GROUP BYORDER BYHAVING 子句中使用别名来引用列:
    ...
    标准 SQL 不允许在 WHERE 子句中引用列别名。施加此限制是因为在评估 WHERE 子句时,可能尚未确定列值。
    ...

    正如其他人已经指出的那样,只需复制 datediff 公式即可。

    【讨论】:

      猜你喜欢
      • 2011-04-08
      • 2021-11-01
      • 2022-01-17
      • 2015-06-20
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      相关资源
      最近更新 更多