Как суммировать два разных табличных значения

#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;
  

Здесь вы можете поиграть с живым запросом