нужно вернуть два набора данных с двумя разными предложениями where

#mysql #sql

Вопрос:

У меня есть таблица, которая отслеживает транзакции.

Таблица настроена следующим образом:

 transactions:

id, account_id, budget_id, points, type
 

Мне нужно вернуть сумму каждого идентификатора бюджета в пунктах, где тип = «распределение», и сумму пунктов, где тип = «выпуск»

Я знаю, как сделать каждое, но не то и другое в одном запросе.

набор ожидаемых результатов:

 budget_id   allocated   issued
   434       200000      100
   242       100000      5020
   621       45000       3940
 

Комментарии:

1. Вложенные запросы в списке полей или присоединении к вложенному запросу

2. Например, чтобы вы начали SELECT budget_id, A.all_sum AS allocated, I.iss_sum AS issued FROM transactions INNER JOIN (SELECT SUM(points) AS all_sum FROM transactions WHERE type='Allocation') AS A INNER JOIN (SELECT SUM(points) FROM transactions WHERE type='Issue') AS I

3. @scrowler — будет работать, но вы можете использовать регистр для условной суммы, если группировка одинакова.

4. Привет, Брэд. Помог ли вам какой-либо из приведенных ниже ответов? Если да, пожалуйста, подумайте о том, чтобы отметить один из них как принятый.

Ответ №1:

 SELECT budget_id, 
       SUM(IF(type = 'allocation', points, 0)) AS allocated,
       SUM(IF(type = 'issue', points, 0)) AS issued
FROM transactions
GROUP BY budget_id
 

Ответ №2:

     select budget_ID, 
     sum(case when type = 'allocated' then points else 0 end) as allocated,
     sum(case when type = 'issued' then points else 0 end) as issued
     ..rest of your query...
    group by budget_ID
 

Случаи могут быть использованы для суммирования только при соблюдении определенных критериев.