Fungsi Lag() dan lead() di PostgreSQL
LAG()
Fungsi LAG() di PostgreSQL digunakan untuk mengambil nilai dari baris sebelumnya dalam hasil query yang sama.
Fungsi ini memiliki dua parameter yaitu: expression dan offset.
Expression adalah kolom yang akan diambil nilainya, sedangkan offset adalah jumlah baris yang akan dilewati sebelum mengambil nilai expression.
Contoh penggunaan LAG() adalah sebagai berikut:
SELECT
LAG(sales, 1) OVER (ORDER BY month) as prev_month_sales,
sales,
month
FROM
sales_table;
Dalam query di atas, LAG() akan mengambil nilai dari kolom sales dari baris sebelumnya (offset 1) dan diurutkan berdasarkan kolom month.
Hasilnya akan menambahkan kolom baru yang disebut prev_month_sales, yang berisi nilai sales dari bulan sebelumnya.
Selain LAG() juga ada fungsi LEAD() yang digunakan untuk mengambil nilai dari baris selanjutnya dalam query yang sama.
Berikut ini adalah contoh lain dari penggunaan fungsi LAG() :
SELECT
product,
LAG(price, 2) OVER (PARTITION BY category ORDER BY date) as prev_price,
price,
date,
category
FROM
products;
Dalam query di atas, LAG() akan mengambil nilai dari kolom price dari baris sebelumnya (offset 2) dan diurutkan berdasarkan kolom date.
Namun query ini juga menggunakan klausa PARTITION BY, yang memungkinkan kita untuk mengelompokkan data berdasarkan kolom category.
Sehingga fungsi LAG() akan mengambil nilai dari baris sebelumnya yang sama kategori nya. Hasilnya akan menambahkan kolom baru yang disebut prev_price, yang berisi harga dari produk sebelumnya dalam kategori yang sama.
SELECT
LAG(employee_name, 2) OVER (ORDER BY hire_date) as prev_employee,
employee_name,
hire_date
FROM
employees;
Dalam query di atas, LAG() akan mengambil nilai dari kolom employee_name dari baris sebelumnya (offset 2) dan diurutkan berdasarkan kolom hire_date.
Fungsi ini digunakan untuk mengambil nama dari karyawan yang dipekerjakan sebelum dua karyawan yang sekarang ditampilkan dalam query.
Hasilnya akan menambahkan kolom baru yang disebut prev_employee, yang berisi nama dari karyawan yang dipekerjakan sebelum dua karyawan yang sekarang ditampilkan dalam query.
LEAD()
Fungsi LEAD() di PostgreSQL mirip dengan fungsi LAG(), digunakan untuk mengambil nilai dari baris selanjutnya dalam hasil query yang sama.
Fungsi ini memiliki dua parameter yaitu: expression dan offset. Expression adalah kolom yang akan diambil nilainya, sedangkan offset adalah jumlah baris yang akan dilewati setelah mengambil nilai expression.
Contoh penggunaan LEAD() adalah sebagai berikut:
SELECT
sales,
LEAD(sales, 1) OVER (ORDER BY month) as next_month_sales,
month
FROM
sales_table;
Dalam query di atas, LEAD() akan mengambil nilai dari kolom sales dari baris selanjutnya (offset 1) dan diurutkan berdasarkan kolom month. Hasilnya akan menambahkan kolom baru yang disebut next_month_sales, yang berisi nilai sales dari bulan selanjutnya.
SELECT
product,
price,
LEAD(price, 2) OVER (PARTITION BY category ORDER BY date) as next_price,
date,
category
FROM
products;
Dalam query di atas, LEAD() akan mengambil nilai dari kolom price dari baris selanjutnya (offset 2) dan diurutkan berdasarkan kolom date.
Namun query ini juga menggunakan klausa PARTITION BY, yang memungkinkan kita untuk mengelompokkan data berdasarkan kolom category.
Sehingga fungsi LEAD() akan mengambil nilai dari baris selanjutnya yang sama kategori nya. Hasilnya akan menambahkan kolom baru yang disebut next_price, yang berisi harga dari produk selanjutnya dalam kategori yang sama.
Kedua fungsi LAG() dan LEAD() digunakan untuk mengambil nilai dari baris sebelum atau sesudah dalam hasil query yang sama, sangat berguna dalam analisis data dan perbandingan data.
Berikut ini adalah contoh lain dari penggunaan fungsi LEAD():
SELECT
employee_name,
hire_date,
LEAD(employee_name, 2) OVER (ORDER BY hire_date) as next_employee
FROM
employees;
Dalam query di atas, LEAD() akan mengambil nilai dari kolom employee_name dari baris selanjutnya (offset 2) dan diurutkan berdasarkan kolom hire_date.
Fungsi ini digunakan untuk mengambil nama dari karyawan yang dipekerjakan setelah dua karyawan yang sekarang ditampilkan dalam query.
Hasilnya akan menambahkan kolom baru yang disebut next_employee, yang berisi nama dari karyawan yang dipekerjakan setelah dua karyawan yang sekarang ditampilkan dalam query.
SELECT
product,
price,
LEAD(price,1) OVER (PARTITION BY category ORDER BY date) as next_price_same_category,
LEAD(price,1) OVER (ORDER BY date) as next_price_all,
date,
category
FROM
products;
Dalam query di atas, terdapat dua kolom yang menggunakan fungsi LEAD() dengan offset 1.
Namun kolom pertama menambahkan klausa PARTITION BY sehingga hanya akan mengambil nilai dari baris selanjutnya yang sama kategori nya, dan kolom kedua menambahkan klausa ORDER BY yang mengambil nilai dari baris selanjutnya tanpa memperhatikan kategori.
Dengan ini kita dapat melihat perbandingan harga produk dalam kategori yang sama atau dari seluruh produk.
Post a Comment for "Fungsi Lag() dan lead() di PostgreSQL "