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

mengembalikan Nol untuk Tanggal yang tidak ada MYSQL GROUP BY

Anda biasanya mencapai hal semacam ini dengan BERGABUNG dengan tabel nilai , yaitu tabel yang berisi semua nilai yang Anda minati.

Tabel nilai tipikal dapat berisi misalnya semua nilai integer antara 0 dan 1.000, atau semua tanggal untuk periode tertentu. Seringkali tabel Nilai menyertakan lebih banyak nilai daripada yang diinginkan, dan kita memperoleh keluaran persis yang diinginkan dengan menambahkan filter dalam klausa WHERE.

Dalam hal ini Anda akan memerlukan tabel yang berisi tanggal. Dengan asumsi tabel ini bernama ValTableDates dan berisi semua tanggal antara Januari 2005 dan Desember 2010, kueri akan terlihat seperti:

SELECT AVG(data) AS data, VT.ValDate
FROM ValTableDates VT
LEFT JOIN  table T ON T.dateReg = VT.ValDate
WHERE VT.ValDate > [Some Start Date] and VT < [Some End Date]
GROUP BY YEAR(dateReg), MONTH(dateReg), DAY(dateReg) 
ORDER BY dateReg

Kueri di atas mungkin memerlukan sedikit penyesuaian untuk mendapatkan nilai Nol daripada NULL, tetapi poin utamanya adalah bahwa Tabel Nilai biasanya merupakan cara paling sederhana untuk menyediakan catatan keluaran untuk titik data yang hilang.
Alternatifnya adalah menggunakan fungsi/ekspresi yang menghasilkan urutan [tanggal] yang diinginkan, di dalam subkueri, tetapi ini umumnya kurang efisien dan lebih rawan kesalahan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara kerja indeks MySQL?

  2. masalah charset dengan mysql

  3. Kelompokkan hasil mysql berdasarkan kategori dan tampilkan ke dalam grup di bawah setiap kategori

  4. Migrasi Hubungan Kunci Asing Vs Fasih di Laravel

  5. ERROR 1349 (HY000):View's SELECT berisi subquery dalam klausa FROM