Mysql

基於 sum 欄位的新欄位

  • March 5, 2014

我正在嘗試基於另一個(總和欄位)創建一個新欄位

SELECT sum(price) AS old_price,
  old_price+100 AS total_price
FROM sales

這將返回**“欄位列表”中的未知列“old_price”**

sum只是一個例子,我真正的問題是在這個欄位中使用一個選擇

我究竟做錯了什麼?

謝謝。

–edit 我使用變數來重用別名,更新程式碼:

SELECT @old_price := sum(price) AS old_price,
  @old_price+100 AS total_price
FROM sales

如果您認為這不是一個好習慣,請告訴我。

你沒有做錯什麼。不幸的是,在欄位列表中引用計算列是不可能的。

通常的解決方法是使用自連接、連接到子選擇或類似的東西。但這僅適用於更複雜的計算。在您的情況下,解決方案就是按照 Ryan 提到的方式編寫它,即使這會讓每個程序員都反感。

是的,選擇列表中的列不能通過別名引用其他列。這是標準 SQL。

MySQL 不保證選擇列表的評估順序從左到右,因此不建議使用像您顯示的變數。

另一種解決方法是在派生表中進行計算並創建列別名,然後在外部查詢中引用它們。這是標準 SQL 並且是可靠的。

SELECT old_price, old_price + 100 AS total_price
FROM (
   SELECT sum(price) AS old_price FROM sales
) AS t;

引用自:https://dba.stackexchange.com/questions/60227