#mysql #sum #left-join
#mysql #сумма #левое соединение
Вопрос:
У меня есть две таблицы:
data
id[int] balance[float] category[id]
1 10.2 1
2 0.12 2
3 112.42 1
4 2.3 3
categories
id[int] name[varchar] start_at[float]
1 high 10.5
2 low 105.2
3 mid 0.7
Я хочу запросить категории и объединить данные. Для каждой категории я хочу, чтобы сумма всех остатков данных добавлялась к значению start_at категорий:
С этого я и начал:
select sum(d.balance) as balancesum, c.name
from data d
left join categories c on c.id = d.category
group by d.category
Что я хочу знать, так это то, как я могу добавить start_at
значение категорий к balancesum
значению?
Комментарии:
1. Можете ли вы поделиться примером того, как должен выглядеть ваш вывод?
Ответ №1:
SELECT c.name, c.start_at SUM(d.balance) as balancesum
FROM categories c
JOIN data d ON c.id = d.category
GROUP BY c.name, c.start_at
Ответ №2:
Вы можете использовать следующий подход:
select
c.name, balancesum, ifnull(balancesum, 0) start_at
from categories c
left join (
-- calculate sum of balances per category
-- and join sums to data table
select category, sum(d.balance) as balancesum
from data d
group by d.category
) b on b.category = c.id;