2012-09-25 87 views
0

我想在MySQL Select語句中存儲一個像@data := sum(field_name)這樣的變量的特定字段的總和。如何將sum(field_name)存儲在MySql Select語句中的變量中?

下面是我查詢的確切例子:我的sum(b.amount)存儲到變量@data1,並試圖在另一行,以顯示它但我很期待行不通

SELECT a.id, @data1:=sum(b.amount) amount, @data1 as returned_val 
FROM tbl_table1 a 
LEFT JOIN tbl_table2 b ON b.acount_id=a.id 
GROUP BY a.id 

通知。

有沒有其他辦法做到這一點?

+0

能否請你包括你期待什麼? – Kao

回答

0

您需要首先聲明變量。

SET @data1=0; 

SELECT a.id, (@data1:=sum(b.amount)) as amount, @data1 as returned_val 
FROM tbl_table1 a 
LEFT JOIN tbl_table2 b ON b.acount_id=a.id 

但是爲什麼你需要的returned_val因爲它與amount相同的值。

+0

謝謝xdazz,但我已經試過了,它不起作用。實際上,即使你沒有像「總和」函數那樣聲明變量,它也會工作,如 – karl2108

3

不要在SELECT語句中用GROUP BY子句使用變量。

從文檔:

注意:在一個SELECT語句,每個表達式僅當 發送到客戶端評估。這意味着在HAVING,GROUP BY或ORDER BY BY 子句中,不能引用涉及在SELECT列表中設置 變量的表達式。

使用子查詢來實現這一點 -

SELECT t.id, @data1:=t.amount, @data1 AS returned_val FROM (
    SELECT a.id, SUM(b.amount) amount 
    FROM tbl_table1 a 
    LEFT JOIN tbl_table2 b ON b.acount_id=a.id 
    GROUP BY a.id 
) t 
+0

尼斯解決方案。子選擇的性能成本是多少? –

相關問題