2012-09-25 28 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

尼斯解决方案。子选择的性能成本是多少? –

相关问题