Вывести значения SUM из одной таблицы mysql - PullRequest
0 голосов
/ 06 мая 2020

У меня есть следующая таблица, в которой столбцы ввода / вывода имеют значения идентификаторов.

enter image description here

Я хочу получить следующую таблицу, объединяющую «количество» для входящих и отдельно.

enter image description here

Id 1 вход = 500 + 200 + 100 = 800 | out = 100 + 50 = 150

Есть ли более простой способ добиться этого?

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Во-первых, используйте подзапрос для создания набора результатов, который вы можете легко обобщить. Этот UNION генерирует две строки для каждой строки вашей входной таблицы

         SELECT in id, `count` in, 0 out FROM `table`
          UNION ALL
          SELECT out id, 0 in, count out FROM `table`

Это дает вам такой результат из первых трех строк вашей таблицы

   id    in    out
    1    500     0
    3      0   500
    1    200     0
    2      0   200
    1    100     0
    2      0   100

Затем просуммируйте этот подзапрос:

    SELECT id, SUM(in) in, SUM(out) out
      FROM (  SELECT in id, `count` in, 0 out FROM `table`
               UNION ALL
              SELECT out id, 0 in, count out FROM `table`
           ) a
     GROUP BY id
1 голос
/ 06 мая 2020

С условным агрегированием:

select 
  coalesce(`in`, `out`) id,
  sum(case when `in` is not null then count end) `in`,
  sum(case when `out` is not null then count end) `out`
from (
  select `in`, null `out`, count from tablename 
  union all 
  select null `in`, `out`, count from tablename 
) t
group by id 

См. демонстрацию . Результатов:

| id  | in  | out |
| --- | --- | --- |
| 1   | 800 | 150 |
| 2   | 500 | 400 |
| 3   | 150 | 900 |
...