Window

NTH_VALUE

PostgreSQLPostgreSQL

Mengembalikan nilai pada posisi ke-n dalam window frame. Mengembalikan NULL jika tidak ada cukup baris. n dimulai dari 1.

Tipe hasil: same as input

Syntax

SQL
NTH_VALUE(expression, n) OVER (
  [PARTITION BY partition_expression]
  ORDER BY sort_expression
  [frame_clause]
)

Parameter

expressionanywajib

Kolom atau ekspresi yang nilainya diambil

nintegerwajib

Posisi nilai yang diambil (1-based)

ORDER BYexpressionwajib

Menentukan urutan dalam window

PARTITION BYexpressionopsional

Membagi data menjadi grup terpisah

Contoh Penggunaan

Ambil Nilai ke-2

SQL
1SELECT
2 category,
3 product_name,
4 sales,
5 NTH_VALUE(product_name, 2) OVER (
6 PARTITION BY category
7 ORDER BY sales DESC
8 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
9 ) AS second_best
10FROM products;

Mengambil produk dengan penjualan kedua tertinggi per kategori.

Hasil
categoryproduct_namesalessecond_best
ElectronicsLaptop1000Phone
ElectronicsPhone800Phone
ElectronicsTablet600Phone

Top 3 Values

SQL
1SELECT DISTINCT
2 category,
3 NTH_VALUE(product_name, 1) OVER w AS top_1,
4 NTH_VALUE(product_name, 2) OVER w AS top_2,
5 NTH_VALUE(product_name, 3) OVER w AS top_3
6FROM products
7WINDOW w AS (
8 PARTITION BY category
9 ORDER BY sales DESC
10 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
11);

Mengambil top 3 produk per kategori dalam satu row.

Nilai Median (Posisi Tengah)

SQL
1SELECT
2 NTH_VALUE(score, (COUNT(*) OVER () + 1) / 2) OVER (
3 ORDER BY score
4 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
5 ) AS median_ish
6FROM test_scores;

Pendekatan alternatif untuk mencari median.