#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
Случаи могут быть использованы для суммирования только при соблюдении определенных критериев.