我有下表t
id a b c
1 1 1 1
2 2 1 1
和表t1
id a b c p
1 1 1 1 47
2 1 1 1 2
3 2 1 1 78
我的目的是获得一张桌子
id a b c p
1 1 1 1 49
2 2 1 1 78
我尝试了以下脚本,但它不起作用@y=@y+t1.p
总是null
:
select t.id,t1.a, t1.b , t1.c ,@y=@y+t1.p from t1
inner join t
where t.a=t1.a
and t.b=t1.b
and t.c=t1.c
答案 0 :(得分:2)
这会得到您想要的结果:
select t.id,
t1.a,
t1.b ,
t1.c ,
SUM(t1.p) from t1
inner join t ON t.a=t1.a and t.b=t1.b and t.c=t1.c
group by t.id, t1.a, t1.b, t1.c
这使用SUM和GROUP BY。确保使用GROUP BY中select的所有列以避免不希望的结果。
答案 1 :(得分:1)
您需要添加GROUP BY语句并使用SUM
SELECT
t.id,
t1.a,
t1.b,
t1.c,
SUM(t1.p) AS p
FROM
t1
INNER JOIN t
USING (a, b, c)
GROUP BY a, b, c
您可以看到它正在运行here。可以用变量来做,但问题的类型通常用聚合函数来解决。
答案 2 :(得分:1)
尝试在sum()
和group by
上使用colease
功能。谷歌中有很多例子。
答案 3 :(得分:1)
计算部分需要以这种方式完成(如果你有时需要它)
SET @y = 0;
select t.id,t1.a, t1.b , t1.c ,(@y:=@y + t1.p) from t1
inner join t
where t.a=t1.a
and t.b=t1.b
and t.c=t1.c
;