sql >> Database >  >> RDS >> Mysql

Hoe de som in een samengevoegde tabel te krijgen bij gebruik van group by - verkeerde resultaten krijgen

Ik begrijp dat je voor elke dag het volgende wilt:

  • de som van order_items.energy_used voor alle bestellingen die die dag zijn gemaakt
  • de created_at en order_sum die overeenkomen met de laatste order gemaakt op die dag

Uw voorbeeldgegevens zijn daar niet erg representatief voor - er is slechts één bestelling per dag. Het is ook onduidelijk waarom created_at wordt herhaald in beide tabellen; je zou echt moeten vertrouwen op de order_id om beide tabellen te relateren

Hier is een vraag voor het bovenstaande doel:dit werkt door deel te nemen aan de orders tabel met een geaggregeerde query die de totale energie per dag berekent (met behulp van order_id om de created_at . te krijgen datum van orders ), en filters op de laatste bestelling per dag:

select 
    date(o.created_at) date_of_month,
    i.total_energy_used,
    o.created_at last_order_date,
    o.order_sum last_order_sum
from orders o
inner join (
    select date(o1.created_at) date_of_month, sum(i1.energy_used) total_energy_used
    from orders o1
    inner join order_items i1 on o1.id = i1.order_id
    group by date(o1.created_at)
) i on i.date_of_month = date(o.created_at)
where o.created_at = (
    select max(o1.created_at)
    from orders o1
    where date(o1.created_at) = date(o.created_at)
)

Demo op DB Fiddle :

date_of_month | total_energy_used | last_order_date     | last_order_sum
:------------ | ----------------: | :------------------ | -------------:
2020-01-25    |                77 | 2020-01-25 09:13:00 |          25.13
2020-01-26    |                75 | 2020-01-26 10:14:00 |          14.00
2020-01-27    |                 0 | 2020-01-27 11:13:00 |          35.00


  1. MySQL Workbench - Maak verbinding met een Localhost

  2. Tabellen uit twee databases samenvoegen met codeigniter

  3. Spaties inkorten (nieuwe regel en tabruimte) in een string in Oracle

  4. Extraheren en middelen van directe waarden in tijdelijke DB in postgresql