sql >> Databasteknik >  >> RDS >> Mysql

Hur man får summan i en sammanfogad tabell när man använder grupp genom att - få fel resultat

Jag förstår att du vill, för varje dag:

  • summan av order_items.energy_used för alla beställningar som skapats den dagen
  • den created_at och order_sum som motsvarar den senaste orders skapades den dagen

Din exempeldata är inte särskilt representativ för det - den har bara en beställning per dag. Det är också oklart varför created_at upprepas i båda tabellerna; du borde verkligen lita på order_id att relatera båda tabellerna

Här är en fråga för ovanstående syfte:detta fungerar genom att gå med i orders tabell med en aggregerad fråga som beräknar den totala energin per dag (med order_id för att hämta created_at datum från orders ), och filtrerar på den senaste beställningen 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 på 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. Hur man lägger till en serialiserad sträng som redan finns i databasen

  2. Utvecklar för Windows Server 2003 64 bitar på Windows XP 32 bitar

  3. MySQL LADDA DATA med flerradsdata

  4. Hur får man ut summan av tid från databasen i PHP?