Суммирование в MySQL

#mysql

#mysql

Вопрос:

У меня есть эта гипотетическая таблица:

  ---- --------- ------- 
| id | type_id | value |
 ---- --------- ------- 
|  1 |       1 |    10 |
|  2 |       1 |    20 |
|  3 |       2 |    30 |
|  4 |       2 |    40 |
|  5 |       3 |    50 |
|  6 |       3 |    60 |
|  7 |       4 |    70 |
|  8 |       4 |    80 |
|  9 |       4 |    90 |
| 10 |       4 |   100 |
 ---- --------- ------- 
  

Что я хочу сделать, так это суммировать все значения с типами 1,2,3 и все значения с типом 4:

  ------ ------ 
| s123 | s4   |
 ------ ------ 
|  210 | 340  |
 ------ ------ 
  

Как я могу это сделать без использования вложенных запросов и ОБЪЕДИНЕНИЯ?
Я попробовал следующий запрос, который дал неверный результат:

 SELECT SUM(t1.value) AS s123, SUM(t2.value) AS s4
FROM test AS t1, test AS t2
WHERE t1.type_id IN (1,2,3) AND t2.type_id=4

 ------ ------ 
| s123 | s4   |
 ------ ------ 
|  840 | 2040 |
 ------ ------ 
  

Ответ №1:

Попробуйте это:

 SELECT SUM(CASE WHEN t1.type_id = 4 THEN 0 ELSE t1.value END) AS s123, 
       SUM(CASE WHEN t1.type_id = 4 THEN t1.value ELSE 0 END)  AS s4
FROM test AS t1
WHERE t1.type_id IN (1,2,3, 4)