如何在MySql Select语句中的变量中存储sum(field_name)?

时间:2012-09-25 07:38:06

标签: mysql variables select

我试图在MySQL Select语句中将特定字段的总和存储在@data := sum(field_name)之类的变量中。

以下是我的查询的确切示例:

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

请注意,我将sum(b.amount)存储到变量@data1并尝试将其显示在另一行,但从未像我期望的那样工作。

还有其他办法吗?

2 个答案:

答案 0 :(得分:4)

不要在SELECT语句中使用带有GROUP BY子句的变量。

来自文档:

  

注意:在SELECT语句中,仅在表达式时计算每个表达式   发送给客户。这意味着在HAVING,GROUP BY或ORDER 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

答案 1 :(得分: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的值相同。