MySQL SUM IF столбец имеет конкретное значение - PullRequest
0 голосов
/ 05 октября 2018

Есть ли способ суммировать строки только тогда, когда они удовлетворяют определенному условию ?, если они этого не делают, они должны быть скопированы в новую таблицу.Например, если у меня есть эта таблица

| id | A | B |
--------------
|  1 | a | 2 |
|  1 | b | 4 |
|  1 | c | 1 |
|  2 | a | 4 |
|  3 | a | 1 |
|  3 | b | 5 |

Я хочу вывод, подобный этому

| id |  A  | B |
--------------
|  1 | a,b | 6 |
|  1 |  c  | 1 |
|  2 |  a  | 4 |
|  3 | a,b | 6 |

Он будет суммироваться, только если столбец 'A' ​​равен 'a' или 'b',он просто скопирует значение, если его 'c'

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

В вашем примере показаны не все возможные случаи.

Но я думаю, что, вероятно, вам не нужно слишком усложнять решение с помощью UNION

http://sqlfiddle.com/#!9/d473d3/6

SELECT id, 
   GROUP_CONCAT(A), 
   SUM(B)
FROM abc
GROUP BY CONCAT(id, IF(A IN ('a','b'),'$',A))
0 голосов
/ 05 октября 2018
  • Вы можете сделать это в двух разных запросах выбора.В первом запросе Select просто рассмотрите случаи, когда A имеет значения «a» или «b».Во втором запросе Select рассмотрим остальные значения (A NOT IN ('a','b'))
  • . Используйте UNION ALL, чтобы объединить результаты в Производная таблица .
  • Упорядочите набор результатов производной таблицы в порядке возрастания на id.
  • Мы используем функции агрегирования, такие как Group_concat() и Sum() дляполучить строку через запятую (для a и b) и сумму значений B соответственно.

Попробуйте выполнить следующее:

SELECT dt.* 
FROM 
(
  SELECT id, 
         GROUP_CONCAT(DISTINCT A) AS A,
         SUM(B) AS B
  FROM your_table 
  WHERE A IN ('a','b') 
  GROUP BY id

  UNION ALL 

  SELECT id, 
         A,
         B
  FROM your_table 
  WHERE A NOT IN ('a', 'b')
  GROUP BY id, A, B
) AS dt 

ORDER BY dt.id ASC 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...