Fungsi analitik

Fungsi untuk Memanipulasi Data di SQL Server

Ana Voicu

Data Engineer

FIRST_VALUE()

FIRST_VALUE(numeric_expression) 
    OVER ([PARTITION BY column] ORDER BY column ROW_or_RANGE frame)
  • Mengembalikan nilai pertama dalam himpunan berurutan.

Komponen klausa OVER

Komponen Status Deskripsi
PARTITION BY column opsional membagi hasil ke dalam partisi
ORDER BY column wajib mengurutkan hasil
ROW_or_RANGE frame opsional menetapkan batas partisi
Fungsi untuk Memanipulasi Data di SQL Server

LAST_VALUE()

LAST_VALUE(numeric_expression) 
    OVER ([PARTITION BY column] ORDER BY column ROW_or_RANGE frame)
  • Mengembalikan nilai terakhir dalam himpunan berurutan.
Fungsi untuk Memanipulasi Data di SQL Server

Batas partisi

RANGE BETWEEN start_boundary AND end_boundary
ROWS BETWEEN start_boundary AND end_boundary
Batas Deskripsi
UNBOUNDED PRECEDING baris pertama dalam partisi
UNBOUNDED FOLLOWING baris terakhir dalam partisi
CURRENT ROW baris saat ini
PRECEDING baris sebelumnya
FOLLOWING baris berikutnya
Fungsi untuk Memanipulasi Data di SQL Server

Contoh FIRST_VALUE() dan LAST_VALUE()

SELECT
    first_name + ' ' + last_name AS name,
    gender,
    total_votes AS votes,    
    FIRST_VALUE(total_votes) 
    OVER (PARTITION BY gender ORDER BY total_votes) AS min_votes,
    LAST_VALUE(total_votes) 
        OVER (PARTITION BY gender ORDER BY total_votes 
                ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS max_votes
FROM voters;
| name            | gender | votes | min_votes | max_votes |
|-----------------|--------|-------|-----------|-----------|
| Michele Suarez  | F      | 20    | 20        | 189       |
| ...             | ...    | ...   | 20        | 189       |
| Marcus Jenkins  | M      | 16    | 16        | 182       |
| Micheal Vazquez | M      | 18    | 16        | 182       |
Fungsi untuk Memanipulasi Data di SQL Server

LAG() dan LEAD()

LAG(numeric_expression) OVER ([PARTITION BY column] ORDER BY column)

  • Mengambil data dari baris sebelumnya dalam hasil yang sama.

LEAD(numeric_expression) OVER ([PARTITION BY column] ORDER BY column)

  • Mengambil data dari baris berikutnya dalam hasil yang sama.
Fungsi untuk Memanipulasi Data di SQL Server

Contoh LAG() dan LEAD()

SELECT 
    broad_bean_origin AS bean_origin,
    rating,
    cocoa_percent,
    LAG(cocoa_percent) OVER(ORDER BY rating ) AS percent_lower_rating,
    LEAD(cocoa_percent) OVER(ORDER BY rating ) AS percent_higher_rating
FROM ratings
WHERE company = 'Felchlin'
ORDER BY rating ASC;
| bean_origin        | rating | cocoa_percent | percent_lower_rating | percent_higher_rating |
|--------------------|--------|---------------|----------------------|-----------------------|
| Grenada            | 3      | 0.58          | NULL                 | 0.62                  |
| Dominican Republic | 3.75   | 0.62          | 0.58                 | 0.64                  |
| Madagascar         | 3.75   | 0.64          | 0.74                 | 0.65                  |
| Venezuela          | 4      | 0.65          | 0.74                 | NULL                  |
Fungsi untuk Memanipulasi Data di SQL Server

Ayo berlatih!

Fungsi untuk Memanipulasi Data di SQL Server

Preparing Video For Download...