全部产品
Search
文档中心

Simple Log Service:Fungsi jendela

更新时间:Jul 02, 2025

Topik ini menjelaskan sintaksis fungsi jendela serta memberikan contoh penggunaannya.

Pengantar

Fungsi agregat menghitung hasil tunggal untuk sekelompok baris, sedangkan fungsi jendela menghitung hasil untuk setiap baris dalam kelompok. Fungsi jendela memiliki tiga elemen utama: partisi, urutan, dan bingkai. Untuk informasi lebih lanjut, lihat Konsep dan Sintaksis Fungsi Jendela.

function over (
    [partition by partition_expression]
    [order by order_expression]
    [frame]
)
  • Partisi: Elemen partisi didefinisikan oleh klausa PARTITION BY. Klausa ini membagi baris menjadi beberapa partisi. Jika tidak ditentukan, semua baris dianggap sebagai satu partisi.

  • Urutan: Elemen urutan didefinisikan oleh klausa ORDER BY. Klausa ini mengurutkan baris di seluruh partisi.

    Catatan

    Jika Anda menggunakan klausa ORDER BY untuk mengurutkan baris berdasarkan bidang dengan nilai yang sama, urutan baris tersebut bersifat non-deterministik. Untuk mendapatkan urutan yang diharapkan, tambahkan bidang lain ke klausa ORDER BY. Contoh: order by request_time, request_method.

  • Bingkai: Elemen bingkai didefinisikan oleh klausa FRAME. Klausa ini menentukan subset dari setiap partisi. Bingkai digunakan untuk memperhalus baris dalam setiap partisi. Anda tidak dapat menentukan klausa FRAME untuk fungsi peringkat. Sintaksis klausa FRAME adalah: { rows | range } { frame_start | frame_between }. Contoh: range between unbounded preceding and unbounded following. Untuk informasi lebih lanjut, lihat Spesifikasi Bingkai Fungsi Jendela.

Fungsi

Kategori

Fungsi

Sintaksis

Deskripsi

Didukung di SQL

Didukung di SPL

Fungsi agregat

Fungsi agregat

Tidak ada

Anda dapat menggunakan semua fungsi agregat sebagai fungsi jendela. Untuk informasi lebih lanjut tentang fungsi agregat, lihat Fungsi agregat.

×

Fungsi peringkat

fungsi cume_dist

cume_dist()

Menghitung distribusi kumulatif setiap nilai dalam partisi. Hasil diperoleh dengan pembagian. Pembilang adalah jumlah baris yang nilainya lebih kecil dari atau sama dengan nilai baris tertentu. Baris tertentu juga dihitung. Penyebut adalah jumlah total baris dalam partisi. Perhitungan didasarkan pada urutan baris dalam partisi. Nilai pengembalian berada dalam rentang (0,1].

×

fungsi dense_rank

dense_rank()

Menghitung peringkat setiap nilai bidang tertentu dalam partisi. Jika dua nilai sama, mereka diberi peringkat yang sama. Peringkat berurutan. Misalnya, jika dua nilai diberi peringkat yang sama yaitu 1, peringkat berikutnya adalah 2.

×

fungsi ntile

ntile(n)

Membagi baris dalam setiap partisi menjadi sejumlah grup yang ditentukan oleh parameter N.

×

fungsi percent_rank

percent_rank()

Menghitung peringkat persentase setiap baris dalam partisi.

×

fungsi rank

rank()

Menghitung peringkat setiap nilai bidang tertentu dalam partisi. Jika dua nilai sama, mereka diberi peringkat yang sama. Peringkat tidak berurutan. Misalnya, jika dua nilai diberi peringkat yang sama yaitu 1, peringkat berikutnya adalah 3.

×

fungsi row_number

row_number()

Menghitung peringkat setiap nilai bidang tertentu dalam partisi. Setiap nilai diberi peringkat unik. Peringkat dimulai dari 1. Misalnya, jika tiga nilai sama, mereka diberi peringkat 1, 2, dan 3.

×

Fungsi offset

fungsi first_value

first_value(x)

Mengembalikan nilai bidang tertentu di baris pertama setiap partisi.

×

fungsi last_value

last_value(x)

Mengembalikan nilai bidang tertentu di baris terakhir setiap partisi.

×

fungsi lag

lag(x, offset, default_value)

Mengembalikan nilai bidang tertentu di baris yang berada pada offset tertentu sebelum baris saat ini dalam partisi. Jika tidak ada baris pada offset tertentu sebelum baris saat ini, nilai yang ditentukan oleh default_value dikembalikan.

×

fungsi lead

lead(x, offset, default_value)

Mengembalikan nilai bidang tertentu di baris yang berada pada offset tertentu setelah baris saat ini dalam partisi. Jika tidak ada baris pada offset tertentu setelah baris saat ini, nilai yang ditentukan oleh default_value dikembalikan.

×

fungsi nth_value

nth_value(x, offset)

Mengembalikan nilai bidang tertentu di baris yang berada pada offset tertentu dari awal partisi.

×

Fungsi agregat

Semua fungsi agregat dapat digunakan sebagai fungsi jendela. Untuk informasi lebih lanjut tentang fungsi agregat, lihat Fungsi Agregat. Contoh berikut menunjukkan cara menggunakan fungsi sum sebagai fungsi jendela.

Sintaksis

sum() over (
    [partition by partition_expression]
    [order by order_expression]
    [frame]
)

Parameter

Parameter

Deskripsi

partition by partition_expression

Menentukan bagaimana baris dipartisi berdasarkan nilai parameter partition_expression.

order by order_expression

Menentukan bagaimana baris dalam setiap partisi diurutkan berdasarkan nilai parameter order_expression.

frame

Menentukan subset dari setiap partisi. Contoh: range between unbounded preceding and unbounded following.

Tipe Nilai Pengembalian

Tipe double.

Contoh

Hitung persentase gaji setiap karyawan di setiap departemen.

  • Pernyataan Kueri

    * |
    SELECT
      department,
      staff_name,
      salary,
      round ( salary * 1.0 / sum(salary) over(partition by department), 3) AS salary_percentage 
  • Hasil Kueri dan Analisissum

fungsi cume_dist

Fungsi cume_dist menghitung distribusi kumulatif setiap nilai dalam partisi. Hasil diperoleh melalui pembagian. Pembilang adalah jumlah baris dengan nilai lebih kecil atau sama dengan nilai baris tertentu (termasuk baris itu sendiri), sedangkan penyebut adalah jumlah total baris dalam partisi. Perhitungan didasarkan pada urutan baris dalam partisi. Nilai pengembalian berada dalam rentang (0,1].

Sintaksis

cume_dist() over (
    [partition by partition_expression]
    [order by order_expression]
)

Parameter

Parameter

Deskripsi

partition by partition_expression

Menentukan bagaimana baris dipartisi berdasarkan nilai parameter partition_expression.

order by order_expression

Menentukan bagaimana baris dalam setiap partisi diurutkan berdasarkan nilai parameter order_expression.

Tipe Nilai Pengembalian

Tipe double.

Contoh

Hitung distribusi kumulatif ukuran setiap objek dalam Bucket OSS bernama bucket00788.

  • Pernyataan Kueri

    bucket=bucket00788 |
    select
      object,
      object_size,
      cume_dist() over (
        partition by object
        order by
          object_size
      ) as cume_dist
    from  oss-log-store
  • Hasil Kueri dan Analisiscume_dist

fungsi dense_rank

Fungsi dense_rank menghitung peringkat setiap nilai bidang tertentu dalam partisi. Jika dua nilai sama, mereka diberi peringkat yang sama. Peringkat berurutan; misalnya, jika dua nilai diberi peringkat 1, peringkat berikutnya adalah 2.

Sintaksis

dense_rank() over (
    [partition by partition_expression]
    [order by order_expression]
)

Parameter

Parameter

Deskripsi

partition by partition_expression

Menentukan bagaimana baris dipartisi berdasarkan nilai parameter partition_expression.

order by order_expression

Menentukan bagaimana baris dalam setiap partisi diurutkan berdasarkan nilai parameter order_expression.

Tipe Nilai Pengembalian

Tipe bigint.

Contoh

Hitung peringkat gaji setiap karyawan di setiap departemen.

  • Pernyataan Kueri

    * |
    select
      department,
      staff_name,
      salary,
      dense_rank() over(
        partition by department
        order by
          salary desc
      ) as salary_rank
    order by
      department,
      salary_rank
  • Hasil Kueri dan Analisisdense_rank

fungsi ntile

Fungsi ntile membagi baris dalam setiap partisi menjadi sejumlah grup yang ditentukan oleh parameter N.

Sintaksis

ntile(n) over (
    [partition by partition_expression]
    [order by order_expression]
)

Parameter

Parameter

Deskripsi

n

Menentukan jumlah grup.

partition by partition_expression

Menentukan bagaimana baris dipartisi berdasarkan nilai parameter partition_expression.

order by order_expression

Menentukan bagaimana baris dalam setiap partisi diurutkan berdasarkan nilai parameter order_expression.

Tipe Nilai Pengembalian

Tipe bigint.

Contoh

Bagi baris dalam setiap partisi menjadi tiga grup.

  • Pernyataan Kueri

    object=245-da918c.model |
    select
      object,
      object_size,
      ntile(3) over (
        partition by object
        order by
          object_size
      ) as ntile
    from  oss-log-store
  • Hasil Kueri dan Analisisntile

fungsi percent_rank

Fungsi percent_rank menghitung peringkat persentase setiap baris dalam partisi. Rumus perhitungan adalah (rank - 1) / (total_rows - 1), di mana rank adalah peringkat baris saat ini, dan total_rows adalah jumlah total baris dalam partisi.

Sintaksis

percent_rank() over (
    [partition by partition_expression]
    [order by order_expression]
)

Parameter

Parameter

Deskripsi

partition by partition_expression

Menentukan bagaimana baris dipartisi berdasarkan nilai parameter partition_expression.

order by order_expression

Menentukan bagaimana baris dalam setiap partisi diurutkan berdasarkan nilai parameter order_expression.

Tipe Nilai Pengembalian

Tipe double.

Contoh

Hitung peringkat persentase ukuran setiap objek OSS.

  • Pernyataan Kueri

    object=245-da918c3e2dd9dc9cb4d9283b%2F555e2441b6a4c7f094099a6dba8e7a5f.model|
    select
      object,
      object_size,
     percent_rank() over (
        partition by object
        order by
          object_size
      ) as ntile
    FROM  oss-log-store
  • Hasil Kueri dan Analisispercent_rank

fungsi rank

Fungsi rank menghitung peringkat setiap nilai bidang tertentu dalam partisi. Jika dua nilai sama, mereka diberi peringkat yang sama. Peringkat tidak berurutan; misalnya, jika dua nilai diberi peringkat 1, peringkat berikutnya adalah 3.

Sintaksis

rank() over (
    [partition by partition_expression]
    [order by order_expression]
)

Parameter

Parameter

Deskripsi

partition by partition_expression

Menentukan bagaimana baris dipartisi berdasarkan nilai parameter partition_expression.

order by order_expression

Menentukan bagaimana baris dalam setiap partisi diurutkan berdasarkan nilai parameter order_expression.

Tipe Nilai Pengembalian

Tipe bigint.

Contoh

Hitung peringkat gaji setiap karyawan di setiap departemen.

  • Pernyataan Kueri

    * |
    select
      department,
      staff_name,
      salary,
      rank() over(
        partition by department
        order by
          salary desc
      ) as salary_rank
    order by
      department,
      salary_rank
  • Hasil Kueri dan Analisisrank

fungsi row_number

Fungsi row_number menghitung peringkat setiap nilai bidang tertentu dalam partisi. Setiap nilai diberi peringkat unik, dimulai dari 1.

Sintaksis

row_number() over (
    [partition by partition_expression]
    [order by order_expression]
)

Parameter

Parameter

Deskripsi

partition by partition_expression

Menentukan bagaimana baris dipartisi berdasarkan nilai parameter partition_expression.

order by order_expression

Menentukan bagaimana baris dalam setiap partisi diurutkan berdasarkan nilai parameter order_expression.

Tipe Nilai Pengembalian

Tipe bigint.

Contoh

Hitung peringkat gaji setiap karyawan di setiap departemen.

  • Pernyataan Kueri

    * |
    select
      department,
      staff_name,
      salary,
      row_number() over(
        partition by department
        order by
          salary desc
      ) as salary_rank
    order by
      department,
      salary_rank
  • Hasil Kueri dan Analisisrow_number

fungsi first_value

Fungsi first_value mengembalikan nilai bidang tertentu di baris pertama setiap partisi.

Sintaksis

first_value(x) over (
    [partition by partition_expression]
    [order by order_expression]
    [frame]
)

Parameter

Parameter

Deskripsi

x

Nama bidang. Nilai parameter ini dapat berupa tipe data apa pun.

partition by partition_expression

Menentukan bagaimana baris dipartisi berdasarkan nilai parameter partition_expression.

order by order_expression

Menentukan bagaimana baris dalam setiap partisi diurutkan berdasarkan nilai parameter order_expression.

frame

Menentukan subset dari setiap partisi. Contoh: range between unbounded preceding and unbounded following.

Tipe Nilai Pengembalian

Tipe data sama dengan tipe data parameter x.

Contoh

Kembalikan ukuran minimum setiap objek dalam Bucket OSS yang ditentukan.

  • Pernyataan Kueri

    bucket :bucket90 |
    select
      object,
      object_size,
      first_value(object_size) over (
        partition by object
        order by
          object_size 
         range between unbounded preceding and unbounded following
      ) as first_value
    from  oss-log-store
  • Hasil Kueri dan Analisisfirst_value

fungsi last_value

Fungsi last_value mengembalikan nilai bidang tertentu di baris terakhir setiap partisi.

Sintaksis

last_value(x) over (
    [partition by partition_expression]
    [order by order_expression]
    [frame]
)

Parameter

Parameter

Deskripsi

x

Nama bidang. Nilai parameter ini dapat berupa tipe data apa pun.

partition by partition_expression

Menentukan bagaimana baris dipartisi berdasarkan nilai parameter partition_expression.

order by order_expression

Menentukan bagaimana baris dalam setiap partisi diurutkan berdasarkan nilai parameter order_expression.

frame

Menentukan subset dari setiap partisi. Contoh: range between unbounded preceding and unbounded following.

Tipe Nilai Pengembalian

Tipe data sama dengan tipe data parameter x.

Contoh

Kembalikan ukuran maksimum setiap objek dalam Bucket OSS yang ditentukan.

  • Pernyataan Kueri

    bucket :bucket90 |
    select
      object,
      object_size,
      last_value(object_size) over (
        partition by object
        order by
          object_size 
         range between unbounded preceding and unbounded following
      ) as last_value
    from  oss-log-store
  • Hasil Kueri dan Analisislast_value

fungsi lag

Fungsi lag mengembalikan nilai bidang tertentu di baris yang berada pada offset tertentu sebelum baris saat ini dalam partisi.

Sintaksis

lag(x, offset, default_value) over (
    [partition by partition_expression]
    [order by order_expression]
    [frame]
)

Parameter

Parameter

Deskripsi

x

Nama bidang. Nilai parameter ini dapat berupa tipe data apa pun.

offset

Offset sebelum baris saat ini dalam partisi. Jika nilai parameter offset adalah 0, nilai bidang tertentu di baris saat ini dikembalikan.

default_value

Jika tidak ada baris pada offset tertentu sebelum baris saat ini, nilai parameter defaut_value dikembalikan.

partition by partition_expression

Menentukan bagaimana baris dipartisi berdasarkan nilai parameter partition_expression.

order by order_expression

Menentukan bagaimana baris dalam setiap partisi diurutkan berdasarkan nilai parameter order_expression.

frame

Menentukan subset dari setiap partisi. Contoh: range between unbounded preceding and unbounded following.

Tipe Nilai Pengembalian

Tipe data sama dengan tipe data parameter x.

Contoh

Hitung jumlah pengunjung unik harian (UV) ke situs web Anda dan hitung persentase peningkatan UV dibandingkan hari sebelumnya.

  • Pernyataan Kueri

    * |
    select
      day,
      UV,
      UV * 1.0 /(lag(UV, 1, 0) over()) as diff_percentage
    from  (
        select
          approx_distinct(client_ip) as UV,
          date_trunc('day', __time__) as day
        from  log
        group by
          day
        order by
          day asc
      )
  • Hasil Kueri dan Analisis窗口函数

fungsi lead

Fungsi lead mengembalikan nilai bidang tertentu di baris yang berada pada offset tertentu setelah baris saat ini dalam partisi.

Sintaksis

lead(x, offset, default_value) over (
    [partition by partition_expression]
    [order by order_expression]
    [frame]
)

Parameter

Parameter

Deskripsi

x

Nama bidang. Nilai parameter ini dapat berupa tipe data apa pun.

offset

Offset setelah baris saat ini dalam partisi. Jika nilai parameter offset adalah 0, nilai bidang tertentu di baris saat ini dikembalikan.

default_value

Jika tidak ada baris pada offset tertentu setelah baris saat ini, nilai parameter defaut_value dikembalikan.

partition by partition_expression

Menentukan bagaimana baris dipartisi berdasarkan nilai parameter partition_expression.

order by order_expression

Menentukan bagaimana baris dalam setiap partisi diurutkan berdasarkan nilai parameter order_expression.

frame

Menentukan subset dari setiap partisi. Contoh: range between unbounded preceding and unbounded following.

Tipe Nilai Pengembalian

Tipe data sama dengan tipe data parameter x.

Contoh

Hitung jumlah pengunjung unik (UV) per jam ke situs web Anda pada 2021-08-26 dan hitung perbedaan persentase antara UV dua jam berturut-turut.

  • Pernyataan Kueri

    * |
    select
      time,
      UV,
      UV * 1.0 /(lead(UV, 1, 0) over()) as diff_percentage
    from  (
        select
          approx_distinct(client_ip) as uv,
          date_trunc('hour', __time__) as time
        from    log
        group by
          time
        order by
          time asc
      )
  • Hasil Kueri dan Analisislead

fungsi nth_value

Fungsi nth_value mengembalikan nilai bidang tertentu di baris yang berada pada offset tertentu dari awal partisi.

Sintaksis

nth_value(x, offset) over (
    [partition by partition_expression]
    [order by order_expression]
    [frame]
)

Parameter

Parameter

Deskripsi

x

Nama bidang. Nilai parameter ini dapat berupa tipe data apa pun.

offset

Offset dari awal partisi.

partition by partition_expression

Menentukan bagaimana baris dipartisi berdasarkan nilai parameter partition_expression.

order by order_expression

Menentukan bagaimana baris dalam setiap partisi diurutkan berdasarkan nilai parameter order_expression.

frame

Menentukan subset dari setiap partisi. Contoh: range between unbounded preceding and unbounded following.

Tipe Nilai Pengembalian

Tipe data sama dengan tipe data parameter x.

Contoh

Kembalikan karyawan yang memiliki gaji tertinggi kedua di setiap departemen.

  • Pernyataan Kueri

    * |
    select
      department,
      staff_name,
      salary,
      nth_value(staff_name, 2) over(
        partition by department
        order by
          salary desc
          range between unbounded preceding and unbounded following
      ) as second_highest_salary from log
  • Hasil Kueri dan Analisisnth_value