Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Złożone MySQL JOIN z GROUP BY

Myślę, że nie możesz zrobić tego wszystkiego za jednym razem, tak jak próbujesz, ponieważ chcesz pogrupować/zsumować przedmioty z różnych stołów w tym samym czasie. Spróbuj tego:

 select unit, name, stays, days, total_price, charges, mgmt_fee,
   (total_price*.01*mgmt_fee) AS management,
   (total_price-(total_price*.01*mgmt_fee)-charges)  AS bal
 from (
 select 
   x.unit, 
   name, 
   count(*) as stays, 
   sum(days) as days, 
   sum(total_price) as total_price, 
   charges,
   mgmt_fee
 from
 (select 
   unit , 
   datediff(depart,arrival) as days,  
   total_price
 from
   Reservations
  ) as x
 join (
   select unit, sum(amount) as charges
   from Charges
   group by unit
   ) as y
 on x.unit = y.unit
 join Unit  as u
 on u.id = x.unit
 group by unit
 ) as inner_result

Niezbyt schludne ani eleganckie, ale myślę, że to działa.Pamiętaj, że musisz uważać, jeśli może być> 1 wiersz opłat na jednostkę.Oto skrzypce, aby pokazać, że działa:http://sqlfiddle.com/#!2/f05ba/18




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wykonanie następującego zapytania trwa zbyt długo. Jak to zoptymalizować

  2. Dynamiczne konstruowanie kodu MySQL do tworzenia wyzwalacza

  3. MySQL :AVG lub AVG niemożliwe?

  4. Błąd wyszukiwania pełnotekstowego mysql

  5. Utworzyć, jeśli wpis nie istnieje, w przeciwnym razie zaktualizować?