PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara Mengelompokkan berdasarkan Bulan di PostgreSQL

Masalah:

Anda ingin mengelompokkan record berdasarkan bulan dalam database PostgreSQL.

Contoh:

Basis data kami memiliki tabel bernama watch dengan data pada kolom id , name , dan production_timestamp .

id nama stempel waktu_produksi
1 tonton 01-03-2019 11:45:23
2 jam tangan pintar 15-09-2019 07:35:13
3 smartband 22-09-2019 17:22:05

Solusi:

Anda dapat menggunakan DATE_TRUNC() berfungsi untuk mengelompokkan record dalam tabel berdasarkan bulan.

Inilah kueri yang akan Anda tulis:

SELECT 
       DATE_TRUNC('month',production_timestamp)
         AS  production_to_month,
       COUNT(id) AS count 
FROM watch
GROUP BY DATE_TRUNC('month',production_timestamp);

Berikut hasil querynya:

production_to_month hitung
01-03-2019 00:00:00 1
01-09-2019 00:00:00 2

Diskusi:

Gunakan DATE_TRUNC() fungsi jika Anda ingin mengambil tanggal atau waktu dengan presisi tertentu dari database PostgreSQL. (Dalam contoh kami, kami menggunakan presisi bulan.)

Fungsi ini membutuhkan dua argumen. Pertama, kami memiliki penentu bagian tanggal (dalam contoh kami, 'bulan'). Perhatikan bahwa specifier adalah string dan harus diapit tanda kutip.

Argumen kedua adalah nilai timestamp; ini bisa berupa ekspresi yang mengembalikan nilai stempel waktu atau nama kolom stempel waktu. (Dalam contoh kami, kami menggunakan kolom production_timestamp ).

Fungsi DATE_TRUNC() memotong stempel waktu ke presisi yang diberikan (dalam hal ini, bulan). Dalam database kami, jam tangan pintar memiliki tanggal produksi 2019-09-15 07:35:13; setelah dipotong menjadi presisi bulan, menjadi 2019-09-01 00:00:00 . Presisi tingkat bulan menyebabkan hari ditampilkan sebagai '01' dan waktu diisi dengan nol. (Bagian tanggal yang terpotong (misalnya hari, bulan) dari stempel waktu diganti dengan yang.)

Mengelompokkan catatan berdasarkan bulan sangat umum di PostgreSQL. Dalam contoh kita, jumlah produk dijumlahkan untuk setiap bulan. (COUNT() fungsi agregat menghitung jumlah produk). Jika Anda mengelompokkan rekaman menggunakan fungsi agregat, Anda harus menggunakan klausa GROUP BY. Setelah klausa GROUP BY, Anda harus menempatkan kolom atau ekspresi yang digunakan dengan fungsi agregat dalam pernyataan SELECT. (Dalam contoh kita, ini adalah DATE_TRUNC( 'month', production_timestamp) .)

Tentu saja, Anda tidak perlu menggunakan DATE_TRUNC() berfungsi hanya untuk mengelompokkan record. Anda juga dapat menggunakannya untuk mendapatkan hari pertama setiap bulan untuk tanggal tertentu.

Untuk setiap jam tangan, dapatkan presisi nama dan tanggal produksi hingga bulan – tidak perlu pengelompokan. Inilah kueri yang akan Anda tulis:

SELECT name,
       DATE_TRUNC('month',production_timestamp)
         AS  production_to_month
FROM watch;

Ini hasilnya:

nama production_to_month
tonton 01-03-2019 00:00:00
jam tangan pintar 01-09-2019 00:00:00
smartband 01-09-2019 00:00:00

Dalam kueri ini, fungsi DATE_TRUNC() memotong stempel waktu ke presisi bulan. Dalam database kami, jam tangan pintar memiliki tanggal produksi '2019-09-15 07:35:13'; sekarang '2019-09-01 00:00:00' , yang merupakan hari pertama bulan itu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang Baru di PostgreSQL 12

  2. Menambah nilai di Postgres

  3. Cara Memperbarui Array di PostgreSQL

  4. Gabungkan kueri loop bersarang ke hasil larik induk - pg-promise

  5. Tidak ada batasan unik atau pengecualian yang cocok dengan ON CONFLICT