MySQL查询根据列条件对行和列求和

时间:2019-01-10 05:06:52

标签: mysql sql

对于以下情况,请帮助我编写查询。我有下面列出的表格

ID  Wt1  Wt1_Type  Wt2  Wt2_Type  Wt3   Wt3_Type  Wt4  Wt4_Type
--------------------------------------------------------------
1   200  1         220  1         300   2         400  3    
2   100  4         150  3         100   5         120  1  
3   100  3         110  1         200   5         100  4

我想查询所有按重量类型(wt1_type,wt2_type,wt3_type,wt4_type)分组的重量(wt1,wt2,wt3,wt4)的总和。

输出应类似于

Wt_type   Total
1         650
2         300
3         650
4         200
5         300

有人可以帮我起草mysql查询以获得此结果吗?

谢谢

3 个答案:

答案 0 :(得分:0)

您可以在下面尝试-使用union all和子查询

select Wt_Type,sum(Wt) as total from
(
   select Wt1_Type as Wt_Type,Wt1 as Wt from tablename
   union all
   select Wt2_Type ,Wt2 from tablename
   union all
   select Wt3_Type ,Wt3 from tablename
   union all
   select Wt4_Type ,Wt4 from tablename
)A group by Wt_Type

答案 1 :(得分:0)

我建议使用更好的表设计,而不是通过@ fa06给出答案,它应该对您有用。这是存储数据的方式:

ID  Type Wt
-------------
1   1    200
2   4    100
3   3    100
4   1    220
5   3    150
6   1    110
7   2    300
8   5    100
9   5    200
10  3    400
11  1    120
12  4    100

请注意,有一个存储类型的列和一个有关该类型的权重的列。现在,您的预期输出只需要一个非常简单的查询:

SELECT Type, SUM(Wt) AS Total
FROM yourTableUpdated
GROUP BY Type;

数据库确实擅长跨行执行操作,远不如跨列执行操作。

答案 2 :(得分:0)

使用它应该可以工作

select Wt_Type,sum(Wt) as total from ( select Wt1_Type as Wt_Type,Wt1 as Wt from tablename union all select Wt2_Type ,Wt2 from tablename union all select Wt3_Type ,Wt3 from tablename union all select Wt4_Type ,Wt4 from tablename )A group by Wt_Type