我可以使用在select
語句中設置的變量嗎?使用select語句中設置的變量
我想要做這樣的事情(這顯然是不工作):
SELECT
YEAR(date_of_spend),
@current := SUM(spend_amount),
@half := (SUM(spend_amount)/2),
(@current - @half)
FROM `sales_data`
GROUP BY YEAR(date_of_spend)
我可以使用在select
語句中設置的變量嗎?使用select語句中設置的變量
我想要做這樣的事情(這顯然是不工作):
SELECT
YEAR(date_of_spend),
@current := SUM(spend_amount),
@half := (SUM(spend_amount)/2),
(@current - @half)
FROM `sales_data`
GROUP BY YEAR(date_of_spend)
號根據MySQL手冊:
作爲一般規則,你不應該賦值給一個用戶變量 和讀取相同的語句中的值。您可能會得到您期望的 結果,但這不能保證。對涉及用戶變量的表達式求值的次序爲 未定義,並且 可能會根據給定語句中包含的元素進行更改; 另外,這個順序不保證在MySQL服務器的 版本之間是一樣的。
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
您需要再次重複表達式或使用子查詢
只是需要對其進行設置:
SELECT
YEAR(date_of_spend),
@current := SUM(spend_amount),
@half := (SUM(spend_amount)/2),
(@current - @half)
FROM `sales_data`,
(SELECT @current := 0, @half := 0) r
GROUP BY YEAR(date_of_spend)
MySQL會執行兩次計算嗎? – Petah 2013-03-27 22:39:23
這不是一個記錄的優化,所以我不會在這方面算很多,尤其是因爲對優化的關注通常集中在連接上。測試它不應該很難。你也可以選擇使用子查詢來避免雙重計算,但可能需要更多的內存(也取決於優化器)。 – koriander 2013-03-27 23:01:27