SQL Dize Toplama İşlevleri

Sql Dize Toplama Islevleri



Daha önce SQL veritabanlarıyla ilgilendiyseniz, muhtemelen toplama işlevlerine aşinasınızdır. Temel olarak, hesaplamaları bir dizi değer üzerinde gerçekleştiren ve tek bir sonuç döndüren bir dizi işlevdir.

Bir örnek, SUM(), AVG(), COUNT(), MAX ve MIN() gibi işlevleri içerir. Ancak SQL'deki toplu işlevler hakkında farkedeceğiniz şey, bunların sayısal işlemlere yönelik olmasıdır.

Ancak dize değerleriyle ilgilenen toplu işlevlerin olduğunu biliyor muydunuz? Bu eğitimde bu işlevlere, nasıl çalıştıklarına ve bunları veritabanlarımızda nasıl kullanabileceğimize bakacağız.







NOT: Bu yazıda tartışılan işlevlerin çoğunun standart SQL'in parçası olmaması iyi bir nottur. Sonuç olarak PostgreSQL, SQL Server vb. gibi çeşitli veritabanı motorlarının bir uzantısıdırlar.



Dize Toplama İşlevleri Nelerdir?

Dize toplama işlevleri, bir grup veya satır içindeki bir dizi dize üzerinde toplama işlemlerini gerçekleştiren ve tek bir sonuç döndüren bir işlevler kümesidir.



Satırları belirli bir sütuna göre gruplamak ve ardından dizeleri her grupta toplamak için bu işlevleri esas olarak GROUP BY cümleciğiyle kullanırız.





Bazı yaygın dize toplama işlevleri şunları içerir:

  • GROUP_CONCAT() – PostgreSQL ve MySQL
  • STRING_AGG – SQL Sunucusu
  • ARRAY_AGG – PostgreSQL
  • LISTAGG – Oracle

Her işlevi ve ne sağladığını inceleyelim.



GROUP_CONCAT()

GROUP_CONCAT() işlevi PostgreSQL ve MySQL veritabanları tarafından desteklenir. Birden fazla satırdaki değerleri tek bir dizede birleştirmemize olanak tanır.

Aşağıdaki gibi bir “çalışanlar” tablomuz olduğunu varsayalım:

CREATE TABLE çalışanları (
çalışan_id INT AUTO_INCREMENT BİRİNCİL ANAHTARI,
ad VARCHAR(50),
soyadı VARCHAR(50),
departman VARCHAR(50)
);

INSERT INTO çalışanlar (ad_ad, soyadı, departman) DEĞERLER
('Alice', 'Smith', 'İnsan Kaynakları'),
('Bob', 'Johnson', 'Pazarlama'),
('Charlie', 'Wilson', 'Finans'),
('David', 'Kahverengi', 'Satış'),
('Eva', 'Davis', 'Mühendislik');

Çıktı:

Çalışanın tam adını, adını alıp soyadıyla birleştirerek belirlemek istersek aşağıdaki örnekte gösterildiği gibi GROUP_CONCAT() fonksiyonunu kullanabiliriz:

SEÇME
departman,
GROUP_CONCAT(ad_adı, ' ', soyadı) AS tam_adı
İTİBAREN
çalışanlar
GRUPLANDIRMA ŞEKLİ
departman;

Bu durumda, “first_name” ve “last_name” sütunlarındaki dizeleri birleştirmek için işlevi ve adlara boşluk eklemek için boş bir dizeyi kullanırız.

Bu, her departmandaki çalışanların bir listesini içerir.

STRING_AGG

Bu işlev GROUP_CONCAT() işlevine benzer ancak yalnızca SQL Server veritabanında desteklenir.

Örnek bir kullanım şu şekildedir:

SEÇME
departman,
STRING_AGG(ad, soyad, ' ') AS tam_ad
İTİBAREN
çalışanlar
GRUPLANDIRMA ŞEKLİ
departman;

Bu, sınırlayıcı olarak boşluk olarak belirtilen sütunlarda dize birleştirme işlemini gerçekleştirir.

ARRAY_AGG

ARRAY_AGG işlevi yalnızca PostgreSQL veritabanında mevcuttur. Değerleri tek bir dizide toplamamızı sağlar.

Bir örnek aşağıdaki gibidir:

SEÇME
departman,
ARRAY_AGG(ad_adı) AS çalışanlar_listesi
İTİBAREN
çalışanlar
GRUPLANDIRMA ŞEKLİ
departman;

Bu, çalışan adını bir dizi olarak toplamalıdır.

LISTAG()

LISTAGG() işlevi yalnızca Oracle veritabanında mevcuttur. Değerleri belirli bir sınırlayıcıyla tek bir dizede birleştirmemize olanak tanır.

Bir örnek aşağıdaki gibidir:

SELECT departmanı, LISTAGG(ad, soyadı,  ' ') GRUP İÇİ (SİPARİŞ BY çalışan_adı ASC) AS çalışanları
ÇALIŞANLARDAN
GRUP BÖLÜMÜNE GÖRE;

Bu, çalışanların adlarını ve belirtilen sınırlayıcıyı birleştirir.

Çözüm

Bu öğreticide, dize değerlerinin bir listesini sağlamamıza ve elde edilen tek bir dize değeri üzerinde işlem gerçekleştirmemize olanak tanıyan dize toplama işlevlerini öğrendik.