Oracleda wm_concat və LISTAGG

Bu məqalədə Sizlər üçün faydalı olacağını düşündüyüm bir funksiya haqqında məlumat verəcəm. Ola bilər ki, belə bir sorğu tələb edilsin ki, bir neçə sətrdə olan məlumatlar müəyyən bir qruplaşma üzrə bir sətrdə verilsin. Məsələn Technet.az saytında yazarlar üzrə məqalələri sorğuladıqda nəticə aşağıdakı kimi olacaq.

wmconcat1

Təbii ki görünən sətirlər yalnız bir hissəni əhatə edir. Lakin bizdən tələb edilə bilər ki, yazarlar üzrə bütün məqalələr bir sütunda verilsin. Bu zaman wm_concat funksiyasından istifadə edə bilərik. Yuxarıda yazılan tələbi icra etmək üçün bu sorğunu icra edə bilərik.

SELECT AU.LNAME, AU.FNAME, wm_concat (AR.ARTICLE)  Məqalə
FROM technet.ARTICLES AR JOIN TECHNET.AUTHORS AU ON AR.AUTHORID = AU.ID
GROUP BY AU.LNAME, AU.FNAME
ORDER BY 2;

Sorğuda yazarlar və məqalələr cədvəlinə əsasən sorğu edilib və yazarın soyadı və adına görə yazdığı məqalələr qruplaşdırılaraq bir sütunda bir sətirdə yerləşdirilib.

Oracle rəsmi sənədlərində bu funksiya barədə kifayət qədər məlumat əldə edə bilməsəz də, alternativ olaraq LISTAGG funksiyasından istifadə edə bilərsiniz. Bu barədə rəsmi sənədlərdə kifayət qədər informasiya əldə etmək imkanınız var. İndi isə eyni sorğunu LISTAGG istifadə etməklə icra edək.

SELECT AU.LNAME, AU.FNAME,
LISTAGG (AR.ARTICLE, ',') WITHIN GROUP (ORDER BY AR.ARTICLE DESC) AS Məqalə
FROM technet.ARTICLES AR JOIN TECHNET.AUTHORS AU ON AR.AUTHORID = AU.ID
GROUP BY AU.LNAME, AU.FNAME
ORDER BY 2;

listagg2

Faydalı olması ümidi ilə.

Səs: +70. Bəyənilsin Zəifdir

Müəllif: Kənan Əkpərov

Şərh yazın