#sql-server-2008
#sql-server-2008
Вопрос:
У меня есть следующие 3 таблицы, и я хотел бы знать правильный sql для ожидаемого результата, как показано ниже. мой sql здесь не работает;
select h.pid,
h.name,
sum(r.amount1) as total1,
sum(r.amount2) as total2,
count(g.pid) as times,
sum(g.take) as totaltaken
from history h
left join rpt_revenue r on h.pid=r.pid
left join guest g on g.pid=r.pid
group by h.pid, h.name;
history
pid name
1 peter
2 may
rpt_revenue
id pid amount1 amount2
1 1 10.00 11.00
2 2 20.00 20.00
3 1 2.00 2.00
4 2 2.00 2.00
guest
gid pid id take
1 1 1 2
2 1 3 2
3 2 2 3
expected result
pid total1 total2 times totaltaken
1 12.00 13.00 2 4
2 22.00 22.00 1 3
Комментарии:
1. Вы также пытались группировать по идентификатору дохода?
2. Да, я сделал, но никакой помощи…
3. Да, это то, что я подумал, поэтому вы должны выполнить агрегацию в своих операторах join, используя вложенные запросы, чтобы суммировать их на верхнем уровне
4. можете ли вы научить меня, переписав sql?
5. Я разговариваю по телефону в поезде, ахах, я могу попытаться найти пример в Интернете, было бы проще
Ответ №1:
Таким образом, чтобы иметь возможность использовать агрегатную функцию поверх join, вы должны сначала объединить свои данные в подзапросе join, а затем объединить их все на верхнем уровне
вот несколько примеров агрегирования