【问题标题】:How to store sum(field_name) in a variable within MySql Select statement?如何将 sum(field_name) 存储在 MySql Select 语句中的变量中?
【发布时间】:2012-09-16 16:42:08
【问题描述】:

我正在尝试将特定字段的总和存储在 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 并尝试在另一行中显示它,但从未按预期工作。

还有其他方法吗?

【问题讨论】:

  • 能否请您提供您的期望?

标签: mysql variables select


【解决方案1】:

不要在带有 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

【讨论】:

  • 不错的解决方案。子选择的性能成本是多少?
【解决方案2】:

你需要先声明变量。

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 的值相同。

【讨论】:

  • 感谢 xdazz,但我已经尝试过了,但它不起作用。实际上,即使你不声明没有“sum”函数的变量,它也可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 2015-01-27
  • 1970-01-01
  • 2010-09-22
相关资源
最近更新 更多