我试图在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
并尝试将其显示在另一行,但从未像我期望的那样工作。
还有其他办法吗?
答案 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
的值相同。