MySQL'de Kullanılan En Etkili Analytic Fonksiyonları Ve Örnekleri ()

MySQL'de Kullanılan En Etkili Analytic Fonksiyonları Ve Örnekleri ()

MySQL'de kullanılan ROW_NUMBER, RANK, DENSE_RANK, LAG ve LEAD gibi analytic fonksiyonlar, verilerin analizini ve işlemlerini optimize etmek için önemlidir ROW_NUMBER fonksiyonu, her satıra benzersiz bir sayı atar ve verilerin sıralanması için yararlıdır RANK fonksiyonu, her satırın sıralamasını belirler ve aynı sıralama değerine sahip satırlara aynı sıra numarası atar DENSE_RANK, RANK fonksiyonuna benzer ancak aynı skoru paylaşan öğeleri atlamaz ve benzersiz bir sıra numarası oluşturur LAG ve LEAD fonksiyonları ise bir sorgudaki önceki veya sonraki satırdan değerleri almak için kullanılır Bu fonksiyonlar verileri kolayca anlamamızı ve analiz etmemizi sağlar

MySQL'de Kullanılan En Etkili Analytic Fonksiyonları Ve Örnekleri ()

MySQL veritabanında kullanılan en etkili analytic fonksiyonları bilmek, verileri analiz etmek ve işlemlerini optimize etmek için çok önemlidir. Bu fonksiyonlar arasında en yaygın kullanılan ROW_NUMBER(), RANK(), DENSE_RANK(), LAG() and LEAD() ve NTILE() fonksiyonları yer almaktadır.

İlk olarak ROW_NUMBER() fonksiyonuna bakalım. Bu fonksiyon, sorgulanan tablo veya görünümde her satır için benzersiz bir sayı atar. Örneğin, "SELECT ROW_NUMBER() OVER(ORDER BY name ASC) AS 'Row Number', name FROM customers;" sorgusu bir müşteriler tablosunda sıralı bir Liste (ASC) oluşturur ve her müşteri için bir sıra numarası atar.

Row Number name
1 Ahmet
2 Ali
3 Mehmet

SQL tablonuzdaki verileri sıralarken, maksimum özgürlükle işlem yapmak istediğinizde ROW_NUMBER() fonksiyonu özellikle yararlıdır.


2. RANK()

RANK() analitik fonksiyonu, veri kümesindeki her bir satırın sıralamasını belirlemek ve aynı sıralama değerine sahip birden fazla satır varsa aynı sıra numarası atamak için kullanılır.

RANK() fonksiyonu, öncelikle veri setindeki her satırı sıralamanın ilgili sütuna göre listeler. Sütun değerine göre sıralandıktan sonra, aynı sıralama numarasına sahip satırlara aynı sıra numarasını atar. Örneğin, RANK() fonksiyonu kullanarak belirli bir sütuna göre sıralandığında, en yüksek değere sahip satır RANK() değeri 1 ile ilişkilendirilirken, en düşük değere sahip satır RANK() değeri veri setindeki toplam satır sayısına eşit olan bir sıra numarası alır.

Örnek: Ad Yaş
1 Ali 35
2 Ahmet 41
2 Ayşe 30
4 Mehmet 27

Yukarıdaki örnekteki veri setinde, Yaş sütunu kullanılarak RANK() fonksiyonu kullanıldığında, Ali'nin Yaş sütunundaki değeri en yüksek olduğu için RANK() değeri 1 olacaktır. Ahmet ve Ayşe aynı Yaş değerine sahip oldukları için ikisi de RANK() değeri 2 olacak, ardından Mehmet 4. RANK() değerini alacaktır.

Bu fonksiyon, sıralamanın belirlenmesi gereken durumlarda oldukça kullanışlıdır. Örneğin, satışları raporlamak için kullanılabilir ve satışların ürüne, tarihe veya diğer kritere göre sıralanmasını sağlar.


3. DENSE_RANK()

DENSE_RANK() fonksiyonu, özellikle sıralama mantığına dayalı analizlerde oldukça kullanışlı olan bir analytic fonksiyondur. Bu fonksiyon, RANK() fonksiyonuna benzer bir işlev görür ancak RANK() fonksiyonunun aksine aynı sıralama skorunu paylaşan öğeleri atlamaz ve her eleman için benzersiz bir sıra numarası oluşturur.

Bu fonksiyonun kullanımı oldukça basittir, sadece sıralama alanı belirtilerek DENSE_RANK() fonksiyonu çağrılır ve sonuç olarak sıralama alanına göre her bir elemanın benzersiz bir sıra numarası alması sağlanır.

ID Name Score Dense Rank
1 Ahmet 85 1
2 Mehmet 92 2
3 Ayşe 85 1
4 Selin 75 3
  • Tabloda gösterilen öğrenci sıralamasında, Ahmet ve Ayşe aynı skoru paylaşmaktadır.
  • Buna rağmen, DENSE_RANK() fonksiyonu sıralama yaptığı alan göz önüne alınarak her bir öğrenci için benzersiz bir sıra numarası oluşturmuştur.
  • Bu sayede, her bir öğrenci için sırası ve skorları arasındaki ilişki net bir şekilde görülebilir.

Bu örneklerden de anlaşılacağı gibi, DENSE_RANK() fonksiyonu kullandığımız verilerin analizinde oldukça önemli bir yere sahiptir ve sıralama analizlerinde kullanıldığı takdirde sonuçların daha net ve anlaşılır olmasını sağlar.


4. LAG() and LEAD()

MySQL'de kullanılan LAG() ve LEAD() fonksiyonları, bir sorgudaki herhangi bir satır için bir önceki veya bir sonraki satırdan değerleri almak için kullanılır. LAG (), bir önceki satırdaki değeri alırken, LEAD (), bir sonraki satırdaki değeri alır. Bu fonksiyonlar, sorgulama sonuçlarına basit bir şekilde eklenerek, bir sonraki veya bir önceki satıra bağlı olarak işlem yapacak olanlar için oldukça yararlıdır.

Bir örnek üzerinden konuyu daha iyi anlayabiliriz. Örneğin, bir perakende şirketi, müşterilerinin önceki ve sonraki siparişleri arasındaki zamanı analiz etmek istiyor. İşte burada LAG() ve LEAD() fonksiyonları devreye girer. Bu fonksiyonlar, bir müşterinin sipariş tarihlerini analiz etmek için kullanılabilir. İki tarih kolonu kullanılarak, önceki tarih değeri LAG(), sonraki tarih değeri ise LEAD() fonksiyonu ile alınabilir.

Ayrıca, bu fonksiyonların kullanımı, verileri kolayca anlamamızı da sağlar. Örneğin, LAG() fonksiyonunun bağlı olduğu bir tabloda, tek bir satırın bir önceki satırdan daha yüksek bir değere sahip olup olmadığını kontrol etmek istediğimizde faydalı olabiliriz. Bu fonksiyon, önceki satırdaki değeri, sütunların örneklerinde kullanılarak kullanıcının mevcut satırın bir önceki satırdan daha büyük veya daha küçük olup olmadığını görmesine olanak tanır.

Sonuç olarak, MySQL'de kullanılan LAG() ve LEAD() fonksiyonlarının birçok kullanım alanı vardır. Bu fonksiyonları kullanarak, verileri daha iyi analiz edebilir ve daha iyi bir görüntü elde edebilirsiniz. Ancak, bu fonksiyonların çok fazla kullanımı, sorguların yavaşlamasına veya hatalı sonuçlara neden olabilir, bu nedenle kullanım kılavuzlarına dikkat edilmelidir.


5. NTILE()

NTILE(), diğer analitik fonksiyonlara benzer şekilde, SQL sorgularında kullanabileceğiniz bir fonksiyondur. Bu fonksiyon, veri kümesindeki her bir satırı belirli sayıda parçaya böler ve bu parçaları sıralar. Böylece, her parçada eşit sayıda satır olur.

Bu fonksiyon, özellikle büyük veri kümeleriyle çalışırken oldukça faydalıdır. Veri kümesi büyüdükçe, sorguların yürütülme süresi de artar. NTILE() fonksiyonu, bu durumda performansı artırmak için kullanılabilir.

NTILE() fonksiyonunun kullanımı oldukça basittir. Kullanımı aşağıdaki gibidir:

PARAMETRE AÇIKLAMA
n Parça sayısını belirtir

Örnek olarak, bir veri kümesindeki ürünleri fiyatlarına göre 4 parçaya bölmek istediğinizi varsayalım. Bu durumda n değeri olarak 4 yazılır:

  • SELECT *, NTILE(4) OVER(ORDER BY Price) AS Quartile FROM Products

Bu sorgu, ürünleri fiyatlarına göre küçükten büyüğe sıralayacak ve ardından her dört ürünü bir parçaya bölecektir. Quartile (çeyrek) sütunu, her bir ürünün hangi parçada olduğunu gösterir.

NTILE() fonksiyonu, veri kümesinin boyutuna ve dağılımına bağlı olarak farklı sonuçlar üretebilir. Bu nedenle, farklı n değerleri deneyerek farklı sonuçlar elde etmek mümkündür.