Pembaca seperti Anda membantu mendukung MUO. Saat Anda melakukan pembelian menggunakan tautan di situs kami, kami dapat memperoleh komisi afiliasi. Baca selengkapnya.

Fleksibilitas SQL sebagai bahasa kueri DBMS telah meningkat selama bertahun-tahun. Utilitas dan keserbagunaannya yang luas menjadikannya favorit sepanjang masa untuk setiap analis data.

Ada beberapa fungsi tingkat lanjut selain yang biasa dari SQL. Fungsi-fungsi ini umumnya dikenal sebagai fungsi jendela. Jika Anda berurusan dengan data yang rumit dan ingin melakukan penghitungan tingkat lanjut, Anda dapat menggunakannya untuk memanfaatkan data Anda sebaik-baiknya.

Pentingnya Fungsi Jendela

Beberapa fungsi jendela tersedia dalam SQL, dan masing-masing akan membantu Anda melakukan serangkaian perhitungan. Dari membuat partisi hingga memberi peringkat baris atau menetapkan nomor baris, fungsi jendela ini melakukan sedikit dari segalanya.

Fungsi jendela bermanfaat saat Anda menerapkan fungsi agregat pada kumpulan data tertentu, atau kumpulan baris. Fungsi-fungsi ini berada di atas dan di luar fungsi agregasi yang disediakan oleh GROUP BY. Namun, perbedaan utamanya adalah, tidak seperti fungsi pengelompokan, data Anda tidak digabungkan menjadi satu baris.

Anda tidak dapat menggunakan fungsi jendela di dalam DI MANA, DARI, Dan KELOMPOK OLEH pernyataan.

Sintaks Fungsi Jendela

Saat Anda merujuk ke fungsi jendela apa pun, Anda harus mengikuti struktur sintaks default, sehingga berfungsi dengan benar. Jika Anda salah menyusun perintah, Anda akan mendapatkan kesalahan dan kode Anda akan gagal dijalankan.

Inilah sintaks defaultnya:

PILIH nama kolom1,
{window_function}(namakolom2)
OVER([PARTITION BY columnname1] [ORDER BY columnname3]) AS new_column
DARI nama_tabel;

Di mana:

  • coulmnname1 adalah nama kolom pertama yang ingin Anda pilih.
  • {window_function} adalah nama fungsi agregat seperti sum, avg, count, row_number, rank, atau dense_rank.
  • namakolom2 adalah nama kolom tempat Anda menerapkan fungsi jendela.
  • namakolom3 adalah nama kolom ketiga, yang akan menjadi dasar untuk partisi.
  • kolom_baru adalah label untuk kolom baru yang dapat Anda terapkan menggunakan SEBAGAI kata kunci.
  • table_name adalah nama tabel sumber.

Fungsi jendela berbeda dari beberapa perintah SQL paling dasar. Tidak seperti fungsi agregat di SQL, Anda dapat menggunakan fungsi jendela ini untuk menjalankan fungsi tingkat lanjut.

Mempersiapkan Dataset

Anda dapat menggunakan BUAT TABEL pernyataan ke buat tabel baru di SQL. Berikut adalah contoh kumpulan data yang akan digunakan panduan ini untuk menentukan beberapa fungsi jendela:

Tanggal pemesanan

Kategori

Warna

Harga penjualan

Kuantitas

08-11-2016

Telepon

Hitam

907.152

6

12-06-2016

Pengikat

Hijau

18.504

3

11-10-2015

Peralatan

Kuning

114.9

5

11-10-2015

Tabel

Cokelat

1706.184

9

09-06-2014

Telepon

Merah

911.424

4

09-06-2014

Kertas

Putih

15.552

3

09-06-2014

Pengikat

Hitam

407.976

3

09-06-2014

Peralatan

Kuning

68.81

5

09-06-2014

Pengikat

Hijau

2.544

3

09-06-2014

Penyimpanan

Oranye

665.88

6

09-06-2014

Penyimpanan

Oranye

55.5

2

15-04-2017

Telepon

Hitam

213.48

3

05-12-2016

Pengikat

Hijau

22.72

4

22-11-2015

Peralatan

Hijau

60.34

7

22-11-2015

Kursi

Coklat tua

71.372

2

13-05-2014

Mebel

Oranye

190.92

5

Fungsi Penjumlahan Dijelaskan

Misalkan Anda ingin menghitung total penjualan untuk setiap nilai dalam kolom kategori. Inilah cara Anda melakukannya:

PILIHkategori, warna,
jumlah (harga_penjualan)
OVER (pesan berdasarkan kategori) AS total_sales
DARI sahil.sampel;

Dalam kode di atas, pernyataan SQL menarik kategori dan warna dari kumpulan data asli. Fungsi penjumlahan menjumlahkan kolom sale_price. Itu dilakukan berdasarkan kategori, karena klausa OVER menentukan pengurutan berdasarkan kolom kategori. Hasil akhirnya adalah sebagai berikut:

Cara Menggunakan Fungsi Jendela Avg()

Seperti fungsi penjumlahan, Anda dapat menghitung rata-rata per baris data dengan rata-rata fungsi. Alih-alih jumlahnya, Anda akan mendapatkan kolom dengan penjualan rata-rata.

PILIHkategori, warna,
rata2 (harga_promo)
OVER (pesan berdasarkan kategori) SEBAGAI avg_sales
DARI sahil.sampel;

Pelajari Cara Menggunakan Fungsi Jendela Count()

Mirip dengan fungsi sum dan avg, fungsi count window di SQL cukup mudah dan bekerja dengan cara yang sama seperti dua fungsi lainnya. Saat Anda melewati fungsi hitungan, Anda mendapatkan jumlah total setiap nilai dalam kolom baru.

Inilah cara Anda dapat menghitung hitungan:

PILIHkategori, warna,
jumlah (kategori)
OVER (urutkan menurut kategori) AS item_count
DARI sahil.sampel;

Fungsi Jendela Row_Number()

Tidak seperti beberapa fungsi jendela lain yang tercantum di atas, row_number() bekerja sedikit berbeda. Fungsi row_number() memberikan nomor baris ke setiap baris, tergantung pada urutan berdasarkan klausa. Nomor baris awal adalah 1; nomor_baris menetapkan nilai yang sesuai untuk setiap baris hingga akhir.

Inilah struktur dasar dari fungsi row_number() :

PILIHkategori, warna,
baris_nomor()
OVER (urutkan menurut kategori) AS item_number
DARI sahil.sampel;

Namun apa yang terjadi jika Anda ingin menetapkan nomor baris terpisah untuk setiap item kategori? Sintaks di atas menetapkan nomor seri bergulir, terlepas dari item yang disimpan dalam kategori. Misalnya, kategori peralatan harus memiliki penomoran tersendiri, diikuti pengikat, dan sebagainya.

Anda dapat menggunakan partisi berfungsi untuk melakukan tugas sederhana namun praktis ini. Kata kunci partisi menetapkan nomor baris yang ditunjuk berdasarkan setiap item kategori.

PILIHkategori, warna,
baris_nomor()
OVER (partisi berdasarkan urutan kategori berdasarkan kategori) SEBAGAI nomor_item
DARI sahil.sampel;

Fungsi Rank() dan Dense_Rank()

Itu pangkat() fungsi bekerja secara berbeda dari baris_nomor() fungsi. Anda perlu menentukan nama kolom dalam urutan berdasarkan fungsi, untuk menggunakannya sebagai dasar untuk menentukan nilai peringkat. Misalnya, pada contoh kode berikut, Anda dapat menggunakan kolom warna di dalam urutan berdasarkan fungsi. Kueri kemudian akan menggunakan urutan tersebut untuk menetapkan nilai peringkat ke setiap baris.

Anda dapat menggunakan sintaks kode di bawah ini untuk meneruskan fungsi peringkat di SQL:

PILIHkategori, warna,
pangkat()
OVER (urutkan berdasarkan warna) AS item_rank
DARI sahil.sampel;

Lihatlah output untuk memahami bagaimana fungsi ini bekerja.

Urutan dengan fungsi mengurutkan kategori warna, sedangkan fungsi peringkat memberikan peringkat untuk setiap warna. Namun, semua nilai warna yang sama memiliki peringkat yang sama, sedangkan warna yang berbeda memiliki peringkat yang berbeda. Warna hitam muncul tiga kali dalam kumpulan data; alih-alih menetapkan nilai peringkat 1, 2, dan 3, item warna hitam mendapatkan peringkat 1.

Namun, warna selanjutnya Brown mendapat peringkat 4 bukannya peringkat 2. Fungsi peringkat melewatkan nilai dan memberikan nilai kronologis berikutnya ke entri yang berbeda. Jika Anda ingin menetapkan nilai peringkat yang lebih bermakna, Anda dapat menggunakan peringkat_padat() fungsi.

Fungsi dense_rank tidak melewatkan nilai peringkat apa pun selama mengurutkan berdasarkan fungsi. Misalnya, tiga item warna pertama (Hitam) akan memiliki peringkat 1. Namun, warna berikut (Coklat) tidak akan memiliki peringkat 4, melainkan peringkat 2, yaitu nomor kronologis berikut dalam daftar penomoran. Fungsi dense_rank adalah fungsi jendela yang lebih praktis karena memberikan nilai yang bermakna ke daftar item.

Inilah cara Anda menggunakan fungsi dense_rank di SQL:

PILIHkategori, warna,
peringkat_padat()
OVER (urutkan berdasarkan warna) AS item_rank
DARI sahil.sampel;

Dan inilah contoh tampilan output dari fungsi ini:

Fungsi SQL untuk Penyelamatan

Fungsi jendela SQL ideal untuk melakukan operasi analitik tingkat lanjut. Namun, Anda dapat menggunakan banyak perintah SQL lainnya untuk memastikan keterampilan komputasi Anda unggul. Saat Anda menggabungkan dan menghitung beberapa hasil sekaligus, tidak ada yang lebih baik daripada menggunakan sub-kueri SQL.

Sub kueri adalah alat yang sangat baik untuk melakukan fungsi lanjutan, meningkatkan kualitas hasil Anda. Bergantung pada kebutuhan jam, Anda dapat menyesuaikan kueri Anda dan membuatnya lebih efektif untuk memenuhi kebutuhan Anda.