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

Permintaan MySQL untuk mendapatkan hitungan per bulan

Jika yang dibuat adalah bidang INT, Anda harus menggunakan FROM_UNIXTIME berfungsi untuk mengubahnya menjadi bidang tanggal, lalu BULAN fungsi untuk mengekstrak bulan:

SELECT Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Month(FROM_UNIXTIME(created))

ini akan menghitung semua baris yang telah dibuat dalam 12 bulan terakhir. Harap perhatikan bahwa mungkin lebih baik juga mengelompokkan berdasarkan TAHUN:

SELECT Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created))

Jika Anda perlu menghitung nomor pendaftaran alih-alih baris, Anda dapat menggunakan sesuatu seperti

COUNT(registration_number)

untuk melewati nilai nol, atau

COUNT(DISTINCT registration_number)

untuk menghitung hanya yang berbeda.

Sunting

Jika Anda juga perlu menunjukkan bulan yang memiliki count=0, saya akan menggunakan kueri seperti ini yang mengembalikan semua bulan untuk saat ini dan untuk tahun sebelumnya:

SELECT y, m
FROM
  (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
  (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
    UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
    UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months;

Dan kemudian saya akan menggunakan LEFT JOIN, yang mengembalikan semua baris kueri pertama, dan hanya baris kueri kedua yang cocok:

SELECT y, m, Count(yourtable.created)
FROM (
  SELECT y, m
  FROM
    (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
    (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
      UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
      UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym
  LEFT JOIN yourtable
  ON ym.y = YEAR(FROM_UNIXTIME(yourtable.created))
     AND ym.m = MONTH(FROM_UNIXTIME(yourtable.created))
WHERE
  (y=YEAR(CURDATE()) AND m<=MONTH(CURDATE()))
  OR
  (y<YEAR(CURDATE()) AND m>MONTH(CURDATE()))
GROUP BY y, m

(harap perhatikan bahwa di sini saya hanya mempertimbangkan 12 bulan terakhir, jadi jika kita berada di pertengahan April 2013 itu akan menghitung baris dalam interval Mei 2012 - 13 April, jika ini bukan perilaku yang benar, beri tahu saya)



  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 memetakan Kueri Asli ke POJO, ketika saya tidak memiliki Entitas di proyek saya?

  2. Stempel waktu MySQL hanya saat dibuat

  3. Pembuatan Kode QR dari baris MySQL

  4. Express js req.body kembali kosong

  5. Koneksi Laravel MySql DB dengan SSH