функция подсчета и суммы не работает в левом соединении

#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, а затем объединить их все на верхнем уровне

вот несколько примеров агрегирования