1

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

下面是我的查询的一个确切示例:

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并尝试将其显示在另一行中,但从未像我期望的那样工作。

有没有其他方法可以做到这一点?

4

2 回答 2

5

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

从文档中:

注意:在 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
于 2012-09-25T07:52:50.123 回答
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.

于 2012-09-25T07:47:01.300 回答