Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara mendapatkan jumlah dalam tabel gabungan saat menggunakan grup dengan - mendapatkan hasil yang salah

Saya mengerti bahwa Anda ingin, untuk setiap hari:

  • jumlah order_items.energy_used untuk semua pesanan yang dibuat hari itu
  • yang created_at dan order_sum yang sesuai dengan order terbaru dibuat pada hari itu

Data sampel Anda tidak terlalu representatif - hanya ada satu pesanan per hari. Juga tidak jelas mengapa created_at diulang di kedua tabel; Anda harus benar-benar mengandalkan order_id untuk menghubungkan kedua tabel

Berikut adalah kueri untuk tujuan di atas:ini bekerja dengan menggabungkan orders tabel dengan kueri agregat yang menghitung total energi per hari (menggunakan order_id untuk mendapatkan created_at tanggal dari orders ), dan memfilter pesanan terbaru per hari:

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 di 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. Cara memasukkan angka tertinggi berikutnya ke dalam database

  2. MySQL Tampilkan Kamus Data tabel

  3. Bagaimana cara mengimpor file csv ke meja kerja MySQL?

  4. Tampilkan sisa baris dengan nol atau 0 di tempat untuk kolom yang tidak ditemukan

  5. MySQL SUM() memberikan total yang salah