Terkadang, Anda mungkin perlu mendapatkan baris pertama per grup di PostgreSQL. Ini bisa menjadi kueri yang sulit menggunakan SQL biasa. Untungnya, PostgreSQL menawarkan fungsi jendela untuk analisis data semacam itu. Berikut cara mendapatkan baris pertama per grup di PostgreSQL.
Cara Mendapatkan Baris Pertama Per Grup di PostgreSQL
Berikut adalah langkah-langkah untuk mendapatkan baris pertama per grup di PostgreSQL.
Katakanlah Anda memiliki tabel berikut produk_penjualan yang berisi penjualan produk.
postgres=# create table product_sales( product varchar(255), order_date date, sale int); postgres=# insert into product_sales(product,order_date, sale) values('A','2020-05-01',250), ('B','2020-05-01',350), ('C','2020-05-01',1250), ('A','2020-05-02',450), ('B','2020-05-02',650), ('C','2020-05-02',1050), ('A','2020-05-03',150), ('B','2020-05-03',250), ('C','2020-05-03',1850); postgres=# select * from product_sales; product | order_date | sale ---------+------------+------ A | 2020-05-01 | 250 B | 2020-05-01 | 350 C | 2020-05-01 | 1250 A | 2020-05-02 | 450 B | 2020-05-02 | 650 C | 2020-05-02 | 1050 A | 2020-05-03 | 150 B | 2020-05-03 | 250 C | 2020-05-03 | 1850
Katakanlah Anda ingin mendapatkan baris pertama di setiap grup, yaitu untuk setiap produk. Anda dapat dengan mudah mendapatkan catatan pertama untuk setiap grup menggunakan FUNGSI WINDOW.
Bonus Baca :Cara Mendapatkan Nomor Baris di PostgreSQL
Cara Mendapatkan Baris Pertama Per Grup di PostgreSQL
Berikut query SQL untuk mendapatkan record pertama per grup. Pertama, kami menetapkan nomor baris untuk setiap record per grup.
postgres=# select *, row_number() over (partition by product order by order_date asc) as row_number from product_sales; product | order_date | sale | row_number ---------+------------+------+------------ A | 2020-05-01 | 250 | 1 A | 2020-05-02 | 450 | 2 A | 2020-05-03 | 150 | 3 B | 2020-05-01 | 350 | 1 B | 2020-05-02 | 650 | 2 B | 2020-05-03 | 250 | 3 C | 2020-05-01 | 1250 | 1 C | 2020-05-02 | 1050 | 2 C | 2020-05-03 | 1850 | 3
Dalam kueri di atas, kami menggunakan row_number() berfungsi untuk menetapkan nomor baris untuk setiap record. Karena, kita membutuhkan penomoran baris yang terpisah untuk setiap grup, kita menggunakan PARTITION WINDOW FUNCTION. Kami memberi tahu Postgresql untuk Mempartisi baris menurut setiap produk , yaitu, dan urutkan baris untuk setiap grup menurut tanggal_pesanan
Selanjutnya, kita hanya perlu menggunakan hasil di atas untuk memilih baris di mana row_number=1
postgres=# select * from ( select *, row_number() over (partition by product order by order_date asc) as row_number from product_sales ) temp where row_number=1; product | order_date | sale | row_number ---------+------------+------+------------ A | 2020-05-01 | 250 | 1 B | 2020-05-01 | 350 | 1 C | 2020-05-01 | 1250 | 1
Kueri di atas akan memberi Anda catatan pertama di setiap grup.
Bonus Baca :Cara Menghitung Persentil di PostgreSQL
Cara Mendapatkan Baris Terakhir Per Grup di PostgreSQL
Jika Anda ingin mendapatkan baris terakhir per grup di PostgreSQL, cukup ubah urutan pengurutan dalam klausa PARTITION dari kueri di atas dari menaik menjadi menurun.
postgres=# select * from ( select *, row_number() over (partition by product order by order_date desc) as row_number from product_sales ) temp where row_number=1; product | order_date | sale | row_number ---------+------------+------+------------ A | 2020-05-03 | 150 | 1 B | 2020-05-03 | 250 | 1 C | 2020-05-03 | 1850 | 1
Mudah-mudahan, Anda bisa mendapatkan rekor pertama di setiap grup di PostgreSQL.
Ubiq memudahkan untuk memvisualisasikan data dalam hitungan menit, dan memantau di dasbor waktu nyata. Cobalah Hari ini!