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

Cara mendapatkan nilai untuk setiap hari dalam sebulan

Ini sebenarnya sangat sulit dilakukan dalam SQL. Salah satu cara untuk melakukannya adalah dengan memiliki pernyataan pilih yang panjang dengan UNION ALLs untuk menghasilkan angka dari 1 hingga 31. Ini menunjukkan prinsipnya tetapi saya berhenti di 4 untuk kejelasan:

SELECT MonthDate.Date, COALESCE(SUM(`values`), 0) AS Total
FROM (
    SELECT 1 AS Date UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    --
    SELECT 28 UNION ALL
    SELECT 29 UNION ALL
    SELECT 30 UNION ALL
    SELECT 31) AS MonthDate
LEFT JOIN Table1 AS T1
ON MonthDate.Date = DAY(T1.Date)
AND MONTH(T1.Date) = 1 AND YEAR(T1.Date) = 2010
WHERE MonthDate.Date <= DAY(LAST_DAY('2010-01-01'))
GROUP BY MonthDate.Date

Mungkin lebih baik menggunakan tabel untuk menyimpan nilai-nilai ini dan bergabung dengannya.

Hasil:

1, 34
2, 10
3, 0
4, 7


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL GROUP BY rentang usia termasuk rentang nol

  2. Sintaks Pembaruan Java MySQL

  3. Indeks tidak terdefinisi:nama pengguna di C:\wamp\www\Website\storeadmin\admin_login.php..dan sama untuk kata sandi

  4. Bergabung dengan tabel InnoDB dengan tabel MyISAM

  5. Cara lebih cepat untuk menghapus baris yang cocok?