Mysql-запрос для суммирования строк и столбцов на основе критериев столбцов - PullRequest
0 голосов
/ 10 января 2019

Пожалуйста, помогите мне написать запрос для следующего условия. У меня есть таблица, которую я перечислил ниже

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, wt2, wt3, wt4), сгруппированные по типу веса (wt1_type, wt2_type, wt3_type, wt4_type).

Вывод должен выглядеть как

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

Может кто-нибудь помочь мне составить запрос mysql, чтобы получить этот результат?

Спасибо

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Вместо того, чтобы давать ответ по @ 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;

Базы данных действительно хороши для выполнения операций над строками, а тем более - над столбцами.

0 голосов
/ 10 января 2019

Используйте это, это должно работать

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
0 голосов
/ 10 января 2019

Вы можете попробовать ниже - используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...