使用mysql用户定义的变量和group by条件

时间:2012-01-15 10:36:13

标签: mysql variables group-by

我试图将一个sum的结果存储在一个变量中,然后在查询中使用它到目前为止没有成功。

  • 我已经尝试过了,它就像我预期的那样有效:SELECT @pos := 'titi' "c1", @pos "c2";

titi | titi

  • 当我尝试按功能分组时,它不再起作用,它将我的变量设置为最后处理的功能。

SELECT c1, @titi := SUM(c2), @titi FROM (SELECT 1 "c1",2 "c2" UNION SELECT 2,3 UNION SELECT 1,4) t GROUP BY c1;

实际输出

  

1,6,3

     

2,3,3

期望输出

  

1,6,6

     

2,3,3

如何使变量在每行中保持其值?

1 个答案:

答案 0 :(得分:5)

如果我没记错的话,这里的问题是在处理组的第一行时计算不包含聚合函数的列的值,而在聚合时发生赋值@var:=SUM价值计算。

那么你要么只需要在其他上下文中重复聚合函数,要么聚合函数相当复杂,并且你不想重复:a)将所有内容放在子查询中,b)使用类似{ {1}}(看起来相当hacky)

P.S。您的查询似乎无效,因为列名称应使用反引号引用。