2015-05-19 15 views
0

我想使用臨時變量獲得列的累積值。集合字段和分組的臨時變量在mysql中不起作用

SELECT sum(price), @temp := @temp + sum(price) AS cumulative_price FROM `table`, (SELECT @temp := 0) B GROUP BY item 

它沒有分組和聚合字段時工作。但是,當存在分組時,cumulative_price的值與sum(price)相同,這不是預期的。

這種不一致的原因是什麼?

+0

是什麼讓你說這是一個矛盾? –

+0

@LightnessRacesinOrbit因爲在沒有分組合並字段的情況下,相同的查詢可以工作。 –

+0

這對我來說似乎很「一致」! :-) –

回答

0

它不應該工作。根據Doc

在SELECT語句中,每個選擇表達式僅在 發送到客戶端時才被評估。這意味着,在一個HAVING,GROUP BY,或ORDER BY 子句,指的是在選擇 表達式列表分配的值的變量不按預期:

mysql> SELECT (@aa:=id) AS a, (@aa+3) AS b FROM tbl_name HAVING b=5; 

參考到HAVING子句中的b指的是使用@aa的選擇列表中的 表達式的別名。這不起作用 預期:@aa包含來自上一個選定行的ID值, 不是來自當前行。

所以,當你定義一個變量它會爲當前行的工作沒有設置排