sql >> Databáze >  >> RDS >> Mysql

Jak získat součet ve spojené tabulce při použití group by - získání špatných výsledků

Chápu, že chcete pro každý den:

  • součet order_items.energy_used pro všechny objednávky vytvořené ten den
  • created_at a order_sum které odpovídají poslední order vytvořeného toho dne

Vaše ukázková data nejsou příliš reprezentativní – mají pouze jednu objednávku denně. Také není jasné, proč created_at se opakuje v obou tabulkách; měli byste skutečně spoléhat na order_id spojit obě tabulky

Zde je dotaz pro výše uvedený účel:funguje to spojením orders tabulka s agregovaným dotazem, který počítá celkovou energii za den (pomocí order_id získat created_at datum z orders ) a filtry podle poslední objednávky za den:

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)
)

Ukázka na 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. Jak vložit hodnoty 'NULL' do databáze PostgreSQL pomocí Pythonu?

  2. Kontingenční tabulka / kontingenční tabulka s více než jedním sloupcem hodnot

  3. pád aplikace na JSON jparser vygeneruje požadavek http

  4. Vyhledejte rozsah souřadnic zeměpisné šířky/délky