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

Jak uzyskać sumę w tabeli połączonej podczas korzystania z grupy według - otrzymanie błędnych wyników?

Rozumiem, że chcesz na każdy dzień:

  • suma order_items.energy_used dla wszystkich zamówień utworzonych tego dnia
  • created_at i order_sum które odpowiadają najnowszemu order stworzony tego dnia

Twoje przykładowe dane nie są w tym zbyt reprezentatywne - ma tylko jedno zamówienie dziennie. Nie jest również jasne, dlaczego created_at powtarza się w obu tabelach; naprawdę powinieneś polegać na order_id powiązać obie tabele

Oto zapytanie do powyższego celu:działa to po połączeniu orders tabela z zapytaniem zbiorczym, które oblicza całkowitą energię na dzień (przy użyciu order_id aby uzyskać created_at data z orders ) i filtruje według najnowszego zamówienia dziennie:

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 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORDER BY RAND() alternatywa

  2. Yii Uzyskaj wykonane zapytanie MySql

  3. Czy można użyć polecenia typu LOAD DATA INFILE do aktualizacji wierszy w bazie danych?

  4. Jak sprawdzić istnienie danych w dwóch kolumnach w dwóch różnych tabelach? MySQL

  5. Wstaw zbiorczy z mysql2 i NodeJs wyrzuca 500