Dizeler için MySQL Group Concat

Mysql Group Concat Strings



GROUP _CONCAT işlevi, birden çok satırdaki sütun değerlerini tek bir alanda birleştirmenize olanak tanıyan bir GROUP BY toplama işlevidir. Küme grubu bir veya boş olmayan sütun değeri içeriyorsa bir dize döndürür ve hiçbiri bulunamazsa NULL değeri döndürür.

Bu öğretici, bir gruptaki dizeleri çeşitli seçeneklerle birleştirmek için MySQL GROUP_CONCAT() işlevini nasıl kullanacağınızı öğretecektir.







Temel Kullanım

Bahsettiğimiz gibi, bu işlev, birleştirilmiş boş olmayan değerlerin değerleriyle bir dize sonucu veya yoksa bir NULL döndürür.



Genel sözdizimi şöyledir:



GROUP_CONCAT ([ BELİRGİN ]ifade[,ifade ...]
[ TARAFINDAN SİPARİŞ ifade
[ ASC | TANIM ] [,sütun_adı ...]]
[AYIRICI str_val])

Açıklama

Yukarıdaki söz diziminden, GROUP_CONCAT işlevinin çeşitli seçenekleri belirtmek için MySQL yan tümcelerini ve kısıtlamalarını kullandığını görebilirsiniz:





  1. BELİRGİN: DISTINCT yan tümcesi, birleştirme işleminden önce küme grubundaki yinelenen değerlerin kaldırılmasına yardımcı olur. Nasıl çalıştığını anlamak için MySQL DISTINCT'i açıklayan öğreticimizi düşünün.
  2. TARAFINDAN SİPARİŞ: Sonraki yan tümce, değerleri belirli bir sırada sıralamaya yardımcı olan ORDER BY'dir. Sıralama artan veya azalan olabilir. Sıra belirtilmezse, MySQL değerleri artan düzende biçimlendirir.
  3. AYIRICI : Bu yan tümce, birleştirme işlemi sırasında grubun değerleri arasına eklenen dize değişmezini ayarlar. Varsayılan olarak MySQL, değerleri ayırmak için virgül (,) kullanır.

NOT: MySQL GROUP_CONCAT() işlevi tarafından oluşturulan dize sonucu, group_concat_max_len değişkeninde ayarlanan değerin uzunluğuyla sınırlıdır. Bu değer sistemde tanımlıdır ve varsayılan değeri 1024'tür. Bu değeri global olarak değiştirebilir veya ihtiyacınız olan oturumda ayarlayabilirsiniz.

AYARLAMAK [ KÜRESEL | OTURUM, TOPLANTI, CELSE ]group_concat_max_len= değer ;

Daha fazla bilgi edinmek için aşağıdaki referansı göz önünde bulundurun:



https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len

Nasıl Çalışır: Örnek

GROUP_CONCAT() işlevinin nasıl çalıştığını açıklamak için basit bir örnek kullanmama izin verin. CHAR için bir alan içeren tabloyu şu şekilde düşünün:

OLUŞTURMAK TABLO concat ( değer CHAR );

Aşağıdaki sorguda gösterildiği gibi tabloya değerler ekleyelim:

SOKMAK İÇİNE concat ( değer ) DEĞERLER ('H'),('VE'),('NS'),('NS'),('VEYA');

Tablodaki değerler üzerinde temel bir GROUP_CONCAT işlemi yaparsak aşağıdaki gibi bir string sonucu elde ederiz:

SEÇME GROUP_CONCAT ( BELİRGİN değer TARAFINDAN SİPARİŞ değer ASC AYIRICI'') İTİBAREN concat ;

Ortaya çıkan değer:

+ ------------------------------------------------- -------------- +
| GROUP_CONCAT ( BELİRGİN değer TARAFINDAN SİPARİŞ değer ASC AYIRICI'') |
+ ------------------------------------------------- -------------- +
|E H L O|
+ ------------------------------------------------- -------------- +
1sıra içinde Ayarlamak (0.01saniye)

Yukarıda verilen sonuca ne olduğunu anlamanın başka bir yolunu mu istiyorsunuz?

Bir L'yi kaldıran MySQL DISTINCT yan tümcesi nedeniyle tüm yinelenen değerleri kaldırarak başlıyoruz.

Daha sonra, (ASC)'de tanımlandığı gibi SİPARİŞ BY artan düzende ilerleriz, bu da dizgiyi şu şekilde değiştirir:

MERHABA->EHLO

Son olarak, {H, E, L, L O}'dan E H L O dizesiyle sonuçlanan, set değerleri için ayırıcı olarak bir boşluk kullanarak birleştirme işlemini gerçekleştiririz.

Örnek Kullanım Durumları

Gerçek bir veritabanı alalım ve GROUP_CONCAT() işlevini nasıl uygulayabileceğimizi göstermek için kullanalım. Bu örnekte, Sakila veritabanını ve özellikle Sakila veritabanındaki adresler tablosunu kullanacağız.

Örnekleriniz için veritabanını indirmek için aşağıdaki kaynağı göz önünde bulundurun:

https://dev.mysql.com/doc/index-other.html

Sakila veritabanının adresler tablosunda ilçe sütununu alacaksınız. Aşağıdaki sorguda gösterildiği gibi tüm benzersiz bölgeleri bir boru ile ayırabiliriz:

SEÇME GROUP_CONCAT ( BELİRGİN semt TARAFINDAN SİPARİŞ bölge AYIRICI'|') İTİBAREN sakila.adres SINIR 5;

Yukarıdaki sorgu, tüm DISTINCT ilçelerini gösterecek ve bunları bir boru ile ayrılmış olarak artan sırada sıralayacaktır.

NOT: GROUP_CONCAT() işlevi bir toplama işlevidir. Bu nedenle ORDER BY deyimini SELECT deyiminde değil, işlevin içinde belirtmeniz gerekir.

Çözüm

Bu öğreticide tartışılan MySQL GROUP_CONCAT() işlevi, yinelenen ve sıralanmamış veriler içerebilecek bir tablodan benzersiz, sıralanmış ve organize veriler oluşturmanıza olanak tanıyan kullanışlı bir işlevdir.

Daha fazla bilgi edinmek için dokümanları veya diğer MySQL eğitimlerimizi göz önünde bulundurun.