Sizin gibi okuyucular MUO'yu desteklemeye yardımcı oluyor. Sitemizdeki bağlantıları kullanarak bir satın alma işlemi gerçekleştirdiğinizde, bir ortaklık komisyonu kazanabiliriz. Devamını oku.

Bir DBMS sorgulama dili olarak SQL'in çok yönlülüğü yıllar içinde arttı. Kapsamlı yardımcı programı ve çok yönlülüğü, onu her veri analisti için tüm zamanların favorisi haline getiriyor.

SQL'in normal işlevlerinin yanı sıra epeyce ileri düzey işlev vardır. Bu işlevler genellikle pencere işlevleri olarak bilinir. Karmaşık verilerle uğraşıyorsanız ve gelişmiş hesaplamalar yapmak istiyorsanız, verilerinizden en iyi şekilde yararlanmak için bunları kullanabilirsiniz.

Pencere İşlevlerinin Önemi

SQL'de çeşitli pencere işlevleri mevcuttur ve her biri bir dizi hesaplama yapmanıza yardımcı olur. Bölümler oluşturmaktan satırları sıralamaya veya satır numaraları atamaya kadar, bu pencere işlevleri her şeyi biraz yapar.

Pencere işlevleri, belirli bir veri kümesi veya satır koleksiyonu üzerinde toplama işlevleri uyguladığınızda faydalıdır. Bu işlevler, GROUP BY'ın sağladığı toplama işlevlerinin ötesine geçer. Ancak temel fark, gruplama işlevinden farklı olarak verilerinizin tek bir satırda birleştirilmemesidir.

instagram viewer

içinde pencere işlevlerini kullanamazsınız. NEREDE, İTİBAREN, Ve GRUPLANDIRMAYA GÖRE ifadeler.

Bir Pencere İşlevinin Sözdizimi

Herhangi bir pencere işlevine başvurduğunuzda, düzgün çalışması için varsayılan sözdizimi yapısını izlemeniz gerekir. Komutu yanlış yapılandırırsanız bir hata alırsınız ve kodunuz çalışamaz.

İşte varsayılan sözdizimi:

SEÇME sütunadı1,
{window_function}(columnname2)
OVER([PARTITION TARAFINDAN sütunadı1] [SİPARİŞ BY sütunadı3]) AS new_column
tablo_adı'ndan;

Nerede:

  • sütunadı1 seçmek istediğiniz ilk sütun adıdır.
  • {pencere_işlevi} toplam, ortalama, sayı, satır_numarası, sıra veya yoğun_sıra gibi bir toplama işlevinin adıdır.
  • sütunadı2 pencere işlevini uyguladığınız sütunun adıdır.
  • sütunadı3 bölüm için temel oluşturacak olan üçüncü sütun adıdır.
  • yeni_sütun kullanarak uygulayabileceğiniz yeni sütun için bir etikettir. GİBİ anahtar kelime.
  • Tablo ismi kaynak tablonun adıdır.

Pencere işlevleri, bazı işlevlerden farklıdır. en temel SQL komutları. SQL'deki toplama işlevlerinden farklı olarak, gelişmiş işlevleri gerçekleştirmek için bu pencere işlevlerini kullanabilirsiniz.

Veri Kümesini Hazırlamak

kullanabilirsiniz TABLO OLUŞTUR beyanı SQL'de yeni bir tablo oluşturun. İşte bu kılavuzun bazı pencere işlevlerini tanımlamak için kullanacağı örnek bir veri kümesi:

Sipariş tarihi

Kategori

Renk

Satış ücreti

Miktar

08-11-2016

telefonlar

Siyah

907.152

6

12-06-2016

Bağlayıcılar

Yeşil

18.504

3

11-10-2015

ev aletleri

Sarı

114.9

5

11-10-2015

Tablolar

Kahverengi

1706.184

9

09-06-2014

telefonlar

Kırmızı

911.424

4

09-06-2014

Kağıt

Beyaz

15.552

3

09-06-2014

Bağlayıcılar

Siyah

407.976

3

09-06-2014

ev aletleri

Sarı

68.81

5

09-06-2014

Bağlayıcılar

Yeşil

2.544

3

09-06-2014

Depolamak

Turuncu

665.88

6

09-06-2014

Depolamak

Turuncu

55.5

2

15-04-2017

telefonlar

Siyah

213.48

3

05-12-2016

Bağlayıcılar

Yeşil

22.72

4

22-11-2015

ev aletleri

Yeşil

60.34

7

22-11-2015

Sandalyeler

Koyu kahverengi

71.372

2

13-05-2014

Mobilya

Turuncu

190.92

5

Açıklanan Toplam Fonksiyonu

Kategori sütunundaki her değer için toplam satışı hesaplamak istediğinizi varsayalım. Bunu şu şekilde yapabilirsiniz:

SEÇMEkategori, renk,
toplam (indirim_fiyatı)
OVER (kategoriye göre sırala) AS total_sales
sahil.sample'den;

Yukarıdaki kodda, SQL ifadesi kategoriyi ve rengi orijinal veri kümesinden alır. Toplam işlevi, sale_price sütununu toplar. OVER yan tümcesi kategori sütununa göre sıralamayı belirttiğinden, bunu kategoriye göre yapar. Nihai sonuç aşağıdaki gibidir:

Avg() Pencere İşlevi Nasıl Kullanılır

Toplam işlevi gibi, veri satırı başına ortalamayı şu formülle hesaplayabilirsiniz: ortalama işlev. Toplam yerine, ortalama satışları içeren bir sütun alacaksınız.

SEÇMEkategori, renk,
ortalama (satış_fiyatı)
OVER (kategoriye göre sırala) AS avg_sales
sahil.sample'den;

Count() Pencere İşlevini Kullanmayı Öğrenin

Toplam ve ortalama işlevlerine benzer şekilde, SQL'deki pencere sayma işlevi oldukça basittir ve diğer iki işlevle aynı çizgide çalışır. Count işlevini geçtiğinizde, yeni sütundaki her bir değerin toplam sayısını alırsınız.

Sayımı şu şekilde hesaplayabilirsiniz:

SEÇMEkategori, renk,
saymak (kategori)
OVER (kategoriye göre sırala) AS item_count
sahil.sample'den;

Row_Number() Pencere İşlevi

Yukarıda listelenen diğer bazı pencere işlevlerinden farklı olarak, row_number() biraz farklı çalışır. row_number() işlevi, order by tümcesine bağlı olarak her satıra bir satır numarası atar. Başlangıç ​​satır numarası 1'dir; satır_numarası, sonuna kadar her satıra karşılık gelen bir değer atar.

Row_number() işlevinin temel yapısı şöyledir:

SEÇMEkategori, renk,
satır numarası()
OVER (kategoriye göre sırala) AS item_number
sahil.sample'den;

Ancak, her kategori öğesine ayrı satır numaraları atamak isterseniz ne olur? Yukarıdaki sözdizimi, kategori içinde depolanan öğelerden bağımsız olarak, hareketli bir seri numarası ayarlar. Örneğin, ev aletleri kategorisinin kendine özel numaralandırması olmalı, ardından ciltleyiciler vb. gelmelidir.

kullanabilirsiniz bölme Bu basit ama pratik görevi yerine getirme işlevi. partition anahtar sözcüğü, her kategori öğesi temelinde belirlenmiş satır numaraları atar.

SEÇMEkategori, renk,
satır numarası()
OVER (kategoriye göre bölümleme kategoriye göre sıra) AS item_number
sahil.sample'den;

Rank() ve Dense_Rank() İşlevleri

bu rütbe() işlevinden farklı çalışır. satır numarası() işlev. Sıralama değerlerini tanımlamak için bir taban olarak kullanmak üzere, sıralı işlev içinde sütun adını belirtmeniz gerekir. Örneğin, aşağıdaki kod örneğinde, order by function içindeki renk sütununu kullanabilirsiniz. Sorgu daha sonra her satıra bir sıra değeri atamak için bu sırayı kullanır.

SQL'de bir sıralama işlevini geçmek için aşağıdaki kod sözdizimini kullanabilirsiniz:

SEÇMEkategori, renk,
rütbe()
OVER (renge göre sırala) AS item_rank
sahil.sample'den;

Bu işlevin nasıl çalıştığını anlamak için çıktıya bir göz atın.

Sıralama işlevi, renk kategorisini sıralarken, sıralama işlevi her renge bir derece atar. Ancak aynı renk değerlerinin tümü aynı sıralamaya sahipken, farklı renklerin farklı sıralamaları vardır. Siyah renk, veri kümesinde üç kez bulunur; 1, 2 ve 3 sıralama değeri atamak yerine, siyah renkli öğeler 1 sıralaması alır.

Ancak bir sonraki renk olan Kahverengi, 2. sıra yerine 4. sırayı alır. Sıralama işlevi, değerleri atlar ve bir sonraki kronolojik değeri farklı girişlere atar. Daha anlamlı bir sıra değeri atamak isterseniz, yoğun_rank() işlev.

Dense_rank işlevi, işleve göre sıralama sırasında herhangi bir sıra değerini atlamaz. Örneğin, ilk üç renkli öğe (Siyah) 1. sırada olacaktır. Bununla birlikte, aşağıdaki rengin (Kahverengi) 4. sırası olmayacak, ancak numaralandırma listesinde aşağıdaki kronolojik sayı olan 2. sırası olacaktır. Dense_rank işlevi, öğe listesine anlamlı bir değer atadığı için daha pratik bir pencere işlevidir.

Dense_rank işlevini SQL'de şu şekilde kullanabilirsiniz:

SEÇMEkategori, renk,
yoğun_rank()
OVER (renge göre sırala) AS item_rank
sahil.sample'den;

Ve işte bu fonksiyonun çıktısının nasıl görüneceğine dair bir örnek:

Kurtarma için SQL İşlevleri

SQL'in pencere işlevleri, gelişmiş analitik işlemleri gerçekleştirmek için idealdir. Ancak, hesaplama becerilerinizin birinci sınıf olduğundan emin olmak için birçok başka SQL komutu kullanabilirsiniz. Tek seferde birden fazla sonucu birleştirip hesapladığınızda, SQL'in alt sorgularını kullanmaktan daha iyi bir şey yoktur.

Alt sorgular, sonuçlarınızın kalitesini artırarak gelişmiş işlevleri gerçekleştirmek için mükemmel bir araçtır. Saatin ihtiyacına göre sorgularınızı özelleştirebilir ve ihtiyaçlarınıza göre daha etkili hale getirebilirsiniz.