SQL Server’da DISTINCT Kullanmadan Yinelenen Değerleri Kaldırmak
Herkese merhaba. Bu yazıda SQL Server’da DISTINCT kullanmadan yinelenen değerleri kaldırmak ile ilgili bilgi vermeye çalışacağım.
SQL Server’da verilerle çalıştığınızda, bazen veri girişleri nedeniyle değil, aynı zamanda T-SQL sorgularıyla da yinelenen veriler elde etme olasılıkları vardır. Çoğumuz DISTINCT anahtar sözcüğünü kullanır. DISTINCT kullanmak iyidir, bu yinelenen satırları kaldıracaktır. Ancak bazı durumlarda DISTINCT sorgu performansını iyileştirmez. Sorgu, yürütme için daha fazla zaman harcar ve daha fazla veriye sahipsek bu daha fazla zaman olacaktır.
ROW_NUMBER() kullanarak, sonuç kümesindeki yinelenen değerleri kaldırabiliriz. ROW_NUMBER(), sorgunun sonuç kümesindeki her satıra sıralı bir tamsayı numarası atayan bir fonksiyondur.
Aşağıda konuyla ilgili bir örnek görmektesiniz.
CREATE TABLE MusteriBilgileri (
MusteriID INT,
MusteriAdi VARCHAR(50),
MusteriSoyadi VARCHAR(50),
Email VARCHAR(100)
);
INSERT INTO MusteriBilgileri (MusteriID, MusteriAdi, MusteriSoyadi, Email)
VALUES
(1, 'Ahmet', 'Yılmaz', 'ahmet.yilmaz@example.com'),
(2, 'Ayşe', 'Kara', 'ayse.kara@example.com'),
(3, 'Ahmet', 'Yılmaz', 'ahmet.yilmaz@example.com'),
(4, 'Murat', 'Demir', 'murat.demir@example.com'),
(5, 'Ayşe', 'Kara', 'ayse.kara@example.com'),
(6, 'Emre', 'Beyaz', 'emre.beyaz@example.com');
WITH CTE
AS
(SELECT
MusteriID
,MusteriAdi
,MusteriSoyadi
,Email
,ROW_NUMBER() OVER (PARTITION BY MusteriAdi, MusteriSoyadi, Email ORDER BY MusteriID) AS rn
FROM MusteriBilgileri)
SELECT
MusteriID
,MusteriAdi
,MusteriSoyadi
,Email
FROM CTE
WHERE rn = 1
Yukarıdaki kodu çalıştırınca aşağıdakine benzer bir sonuç göreceksiniz.
Görüldüğü üzere yinelenen satırlar kaldırılmış oldu.
Başka bir seçenek de, GROUP BY ifadesini kullanarak yinelenen değerleri kaldırmaktır. GROUP BY deyimi, aynı değerlere sahip satırları özet satırları halinde gruplandırır.
SELECT
MusteriAdi
,MusteriSoyadi
,Email
FROM MusteriBilgileri
GROUP BY MusteriAdi
,MusteriSoyadi
,Email
Yukarıdaki kodu çalıştırınca aşağıdakine benzer bir sonuç göreceksiniz.
Görüldüğü üzere yinelenen satırlar tekrar kaldırılmış oldu.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.