掛け算をしようとしていますが、なぜうまくいかないのかわかりません。日数はわかりましたが、これに 1 日あたりの料金を掛ける必要があります。
誰でも助けることができますか?
SELECT `Daily_Charge`, DATEDIFF(End_Date,Start_Date) AS `Total`,
`Total`*Daily_Charge AS `Done` FROM `Car`,`Contract` WHERE `Contract_Id`="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';
別の列定義で列エイリアスを使用することはできません。式を再度記述する必要があります。
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
MySQLによると- 列エイリアスの問題
エイリアスをクエリ選択リストで使用して、列に別の名前を付けることができます。GROUP BY、ORDER BY、またはHAVING句でエイリアスを使用して、列を参照できます。
...
標準 SQL では、WHERE句での列エイリアスへの参照は許可されていません。この制限が課されるのは、WHERE句が評価されるときに、列の値がまだ決定されていない可能性があるためです。
...
他の人がすでに指摘したように、datediff
式を複製するだけです。