对于以下情况,请帮助我编写查询。我有下面列出的表格
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查询以获得此结果吗?
谢谢
答案 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