MySQL'de Analitik Fonksiyonları Kullanmak

MySQL'de Analitik Fonksiyonları Kullanmak

MySQL'de analitik fonksiyonlar, SQL sorgularında birden fazla satırdaki verilerin analiz edilmesi için kullanılır Bu fonksiyonlar, sorgu sonuçlarında belirli bir sıralama ve gruplama yaparak, verilerin daha anlaşılır hale getirilmesini sağlar ROW_NUMBER , RANK , DENSE_RANK , LAG ve LEAD gibi sık kullanılan fonksiyonlar arasında sıralama, gruplama ve bir önceki/sonraki satırın değerlerinin döndürülmesi yer alır Doğru fonksiyonun kullanımı ile SQL sorgularının daha özelleştirilmiş, anlamlı ve verimli bir şekilde sonuçlandırılması mümkündür

MySQL'de Analitik Fonksiyonları Kullanmak

MySQL, hem küçük hem de büyük ölçekli işletmeler için etkili ve popüler bir veri tabanı yönetim sistemi olarak bilinir. Analitik fonksiyonlar, bir SQL sorgusunda birden fazla satırdaki verilerin analiz edilmesi için kullanılır. Bu makale, MySQL'in analitik fonksiyonlarının ne olduğu ve nasıl kullanıldığı konusunda ayrıntılı bilgi verecektir.

Analitik fonksiyonların temel işlevi, bir SQL sorgusunda çoklu satırları analiz etmek ve sonuç olarak bir sonuç kümesi vermek için kullanılmaktır. Analitik fonksiyonlar, bir SQL sorgusunda birden fazla satırdaki verileri analiz etmek ve sonuçları raporlamak için kullanılabilecek birçok araç sunar. Bu araçların bazıları, ROW_NUMBER (), RANK (), DENSE_RANK (), LAG () ve LEAD () gibi sık kullanılan fonksiyonlardır.


Analitik Fonksiyonlar Nedir?

Analitik fonksiyonlar, bir SQL sorgusunda birden fazla satırdaki verilerin analiz edilmesi için kullanılır. Bu fonksiyonlar, sorgu sonuçlarında belirli bir sıralama ve gruplama yaparak, belirli bir deseni takip etmek için kullanılır. Analitik fonksiyonlar, sorgunun sonucunda döndürülen satırların analiz edilmesinde de çok önemli bir rol oynar. Bunların en önemli özelliği, belirli bir sütunda yer alan verilerin karşılaştırılması ve bir sıralama yapılmasıdır.

Analitik fonksiyonlar, karşılaştırma yapmak, bir sütunu sıralamak, belli bir desene göre veriyi gruplamak için kullanılır. Bu nedenle, bu fonksiyonlar SQL sorgularının yapısını daha anlaşılır hale getirir. Analitik fonksiyonlar, sorgunun sonucunda elde edilen verilerin daha anlamlı ve yararlı bir şekilde analiz edilmesini sağlar. Bu nedenle, birçok veritabanında analitik fonksiyonlar yaygın olarak kullanılmaktadır.


Bazı Analitik Fonksiyonlar

MySQL analitik fonksiyonları, verileri sorgularken farklı yöntemlerle analiz etmek için kullanılır. Bu fonksiyonlar, birçok durumda aynı sonucu verir, ancak belirli durumlarda sonuçlar farklılık gösterebilir. MySQL'de en sık kullanılan bazı analitik fonksiyonlar arasında ROW_NUMBER(), RANK(), DENSE_RANK(), LAG() ve LEAD() bulunur.

Fonksiyon Açıklama
ROW_NUMBER() Sorgunun sonucu olarak döndürülen satırların sıralanması için kullanılır. Her satıra benzersiz bir numara atanır.
RANK() Satırları belirli bir sütuna göre sıralar ve satırlara aynı sıralama değerleri atar.
DENSE_RANK() RANK() fonksiyonu gibi çalışır, ancak aynı sıralama değerlerine sahip satırlar arasındaki boşlukları atlar.
LAG() Belirli bir sütundaki bir satırın bir önceki satırına göre değerlerini döndürür.
LEAD() Belirli bir sütundaki bir satırın bir sonraki satırına göre değerlerini döndürür.

Bu fonksiyonlar, verileri daha etkili bir şekilde analiz etmek için kullanılabilir ve SQL sorgularının daha iyi sonuçlar vermesine yardımcı olabilir. Ancak, her bir fonksiyonun kendi özellikleri ve kullanım alanları vardır, bu nedenle hangi fonksiyonun kullanılması gerektiğine karar vermek önemlidir. Doğru fonksiyonun seçilmesi, verilerin daha iyi anlaşılmasına ve daha verimli bir sorgulama deneyimine yol açabilir.

    Bir SQL sorgusunda birden fazla satırdaki verileri analiz etmek için MySQL'de kullanılan analitik fonksiyonlar, sorgunun sonucu olarak döndürülen satırların sıralanması, satırlara aynı sıralama değerlerinin atanması gibi işlevleri yerine getirerek verilerin daha etkili bir şekilde analiz edilmesini sağlar. Bu fonksiyonlardan en sık kullanılanlarından bazıları ROW_NUMBER(), RANK(), DENSE_RANK(), LAG() ve LEAD() fonksiyonlarıdır.

    ROW_NUMBER() fonksiyonu, bir sorgunun sonucu olarak döndürülen satırların sıralanması için kullanılır. Her satıra benzersiz bir numara atanır. RANK() fonksiyonu, satırları belirli bir sütuna göre sıralar ve satırlara aynı sıralama değerleri atar. DENSE_RANK() fonksiyonu, RANK() fonksiyonu gibi çalışır, ancak aynı sıralama değerlerine sahip satırlar arasındaki boşlukları atlar. LAG() fonksiyonu, belirli bir sütundaki bir satırın bir önceki satırına göre değerlerini döndürürken, LEAD() fonksiyonu belirli bir sütundaki bir satırın bir sonraki satırına göre değerlerini döndürür.

    Aşağıdaki tabloda bu fonksiyonların kullanımına ilişkin bir örnek gösterilmiştir:

    Fonksiyon Örnek Kullanım Açıklama
    ROW_NUMBER() SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) as rank, first_name, last_name, salaryFROM employees Employees tablosundaki her çalışanın maaşına göre sıralanmasını sağlar ve her satıra benzersiz bir sıra numarası verir.
    RANK() SELECT RANK() OVER (ORDER BY total_sales DESC) as rank, salesman_id, total_salesFROM sales Sales tablosundaki satıcıların toplam satışlarına göre sıralama yapar ve her satıra aynı sıralama değerini atar.
    DENSE_RANK() SELECT DENSE_RANK() OVER (ORDER BY department_id) as rank, department_id, department_nameFROM departments Departments tablosundaki bölümleri, bölüm kimliğine göre sıralar ve her satıra aynı sıralama değerini atar, ancak herhangi bir sıralama değeri atlamaz.
    LAG() SELECT first_name, last_name, salary, LAG(salary) OVER (ORDER BY salary DESC) as prev_salaryFROM employees Employees tablosundaki çalışanların maaşlarına göre sıralama yapar ve her satıra bir önceki çalışanın maaşını getirir.
    LEAD() SELECT first_name, last_name, salary, LEAD(salary) OVER (ORDER BY salary DESC) as next_salaryFROM employees Employees tablosundaki çalışanların maaşlarına göre sıralama yapar ve her satıra bir sonraki çalışanın maaşını getirir.

    ROW_NUMBER() Fonksiyonu

    ROW_NUMBER() fonksiyonu, bir sorgunun sonucu olarak döndürülen satırların sıralanması için kullanılır. Bu fonksiyon, satırları sıralamak için kullanılan ORDER BY ifadesinin yanında kullanılır. ROW_NUMBER() fonksiyonu, her satıra benzersiz bir numara atar ve bu kod, sorgu sonuçlarından her satırı belirli bir sıraya koymanıza olanak sağlar.

    Örneğin, employees tablosundaki çalışanları maaşlarına göre sıralayalım ve her satıra bir sıra numarası atayalım:

    rank first_name last_name salary
    1 John Doe 5000
    2 Jane Smith 4000
    3 Mike Johnson 3500

    Yukarıdaki tablo, ROW_NUMBER() fonksiyonunun kullanıldığı bir sorgunun sonuçlarıdır. Satırlar, maaşa göre sıralanmış ve her satıra bir benzersiz sıra numarası atanmıştır. Bu yöntem, büyük miktarda verinin kolayca incelenmesi ve analiz edilmesi için oldukça kullanışlıdır.


    Örnek:

    Örnekteki bu sorgu, employees tablosunda yer alan her çalışanın maaşına göre sıralanmasını sağlamaktadır. ROW_NUMBER() fonksiyonu satırları numaralandırmak için kullanılır ve satırlara benzersiz bir numara atanır. OVER ifadesinden sonra ORDER BY kullanılır ve salary sütununa göre sıralama yapılır. DESC sıralama türüdür ve en yüksek maaştan en düşük maaşa doğru sıralama yapılır. SELECT ifadesindeki alias (rank) özelliği, numaralandırılmış satırlar için kolon adıdır. İkinci, üçüncü ve dördüncü sıralama özelliklerinin adı (first_name, last_name ve salary) ise employees tablosundaki sütunların adlarıdır.

    FROM employees

    Hemen hemen her işletmenin bir çalışan veritabanı vardır. Bu veritabanındaki bilgiler, bir işletmenin çalışanlarının kategorize edilmesi ve yönetilmesi için hayati önem taşır. MySQL'de analitik fonksiyonları kullanarak, bir işletmenin veritabanındaki bilgileri daha da etkili bir şekilde yönetebilirsiniz.

    Bu örnekte, "employees" tablosundaki verileri kullanarak, herhangi bir işletme için yararlı olabilecek birkaç analitik sorgu yazabilirsiniz. Her sorguda, satırları belirli bir sütuna göre sıralama, her satıra benzersiz bir numara atama ve çalışan bilgilerine daha büyük bir kontekst sağlama işlemleri gerçekleştirilebilir.

    Analitik fonksiyonların kullanımı sayesinde, bir işletme veritabanındaki bilgilerle daha ayrıntılı bilgiler elde edebilir, yönetmek için daha kolay hale getirebilir ve sonuç olarak daha iyi iş kararları alabilir.


    Açıklama:

    Bu örnek sorgu, employees adlı tablodaki her çalışanın maaşına göre sıralanmasını ve her bir satıra benzersiz bir sıra numarasının atanmasını sağlar. ORDER BY kelimesi, sorgunun sıralama kriterini belirtir. Bu durumda, maaş sütununa göre sıralama kullanılır. DESC anahtar kelimesi, sıralamanın azalan düzende (yüksekten düşüğe doğru) yapılacağını belirtir. ROW_NUMBER () OVER ifadesi, sıralama işlemini gerçekleştirir ve her satıra benzersiz bir numara atar. Aslında, OVER ifadesi, sorgulamanın sonucu olan tüm tablonun üzerine uygulanır.


    RANK() Fonksiyonu

    RANK() fonksiyonu, bir sütuna göre sıralama değerleri atayan analitik bir fonksiyondur. Sıralama değeri, sıralama sırasına göre belirlenir ve aynı sıralama değerine sahip satırlara aynı sıralama değeri atanır.

    Bu fonksiyon, genellikle birden fazla satırın sıralama durumunu belirlemek için kullanılır. Örneğin, bir departman için çalışanların maaşlarının sıralamasına bakacak olursak, RANK() fonksiyonu aynı maaşa sahip olan çalışanlara aynı sıralama değerini atar ve sıralama sonuçları daha okunaklı hale gelir.

    Örnek bir kullanımı aşağıdaki gibi olabilir:

    employee salary department RANK()
    Ahmet 5000 IT 1
    Mehmet 3500 IT 3
    Ayşe 4500 IT 2
    Deniz 4000 IT 4

    Yukarıdaki örnek tabloda, IT departmanındaki çalışanların maaşlarına göre sıralama değerleri belirlenmiştir. RANK() fonksiyonu, sıralama sonucuna göre aynı sıralama değerlerine sahip çalışanlara aynı sıralama değerini vermiştir. Bu sayede, sıralama sonuçları daha okunaklı hale gelmiştir.


    DENSE_RANK() Fonksiyonu

    DENSE_RANK() fonksiyonu, RANK() fonksiyonuna oldukça benzerdir. Ancak, sıralama değerlerine sahip birden fazla satırın varlığı durumunda, bir farklılık ortaya çıkar. DENSE_RANK() fonksiyonu aynı sıralama değerlerine sahip satırlar arasındaki boşlukları atlar.

    Bunun anlamı; örneğin, yukarıda bahsedilen örnek sorguda iki çalışanın aynı maaşa sahip olması durumunda, RANK() fonksiyonunun iki satıra da aynı sıralama değerini atayacağıdır. Ancak DENSE_RANK() fonksiyonu, ikinci sıraya iki numara atlayarak devam edecektir. Böylece sıralama değerlerinin arasında boşluk oluşmaz.

    Bu fonksiyon, birçok durumda kullanışlı olabilir. Örneğin, bir sorguyu sıralarken aynı değere sahip olan elemanları atlamak isteyebilirsiniz. Bu durumlarda DENSE_RANK() fonksiyonu kullanarak sıralama işleminizdeki boşluğu atlayabilirsiniz.

    DENSE_RANK() Kullanımı
    DENSE_RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) as rank,

    LAG() Fonksiyonu

    MySQL'de LAG() fonksiyonu, belirli bir sütundaki bir satırın bir önceki satırına göre değerlerini döndürür. Bu fonksiyon, verilerin zamana göre analizi için oldukça faydalıdır. Örneğin, bir şirketin yıllık satış raporlarına bakmak isteyebilirsiniz. Bu raporlar, yılın farklı dönemlerindeki satışları içerebilir. LAG() fonksiyonu, önceki yılın satışlarını karşılaştırmak ve performansınızı ölçmek için kullanılabilir.

    Aynı zamanda LAG() fonksiyonu, bunu çalışanların önceki sıralama, maaş veya zamana karşı karşılaştırmak için kullanabilirsiniz. Özellikle kapasiteli tabloları kullanırken, verilerin doğru analiz edilmesi, doğru kararlar almanızı sağlayabilir. Bunlar, işletme kararlarınızda belirleyici faktörler olabilir.


    LEAD() Fonksiyonu

    MySQL'de LEAD() fonksiyonu, belirli bir sütundaki bir satırın bir sonraki satırındaki değerleri döndürür. Bu fonksiyon, bir satırın belirli bir sütunundaki değeri alır ve bir sonraki satırdaki aynı sütundaki değeri döndürür.

    Bu fonksiyon, INSERT INTO sorgusuyla yeni bir tablo oluşturmak veya mevcut bir tabloya yeni bir sütun eklemek için sıklıkla kullanılır.

    Örneğin, employees tablosunda, her çalışanın maaşı ve bir sonraki çalışanın maaşı karşılaştırılabilir. Aşağıdaki sorgu, derinlemesine bir analiz sunar:

    first_name last_name salary next_salary
    John Doe 5000 6500
    Jane Smith 6500 7000
    Mark Johnson 7000 NULL

    Bu sorgu, next_salary sütununu ekler ve her çalışanın maaşını bir sonraki çalışanın maaşıyla karşılaştırır. Son çalışan için, next_salary değeri NULL'dir, çünkü bir sonraki satır yoktur.