Примерът включва функции като SUM(), AVG(), COUNT(), MAX и MIN(). Въпреки това, едно нещо, което ще забележите относно агрегатните функции в SQL е, че те са насочени към числени операции.
Но знаете ли, че има агрегатни функции, които се занимават със стойности на низове? В този урок ще разгледаме тези функции, как работят и как можем да ги използваме в нашите бази данни.
ЗАБЕЛЕЖКА: Добре е да се отбележи, че повечето от функциите, които се обсъждат в тази публикация, не са част от стандартния SQL. В резултат на това те са разширение на различни машини за бази данни като PostgreSQL, SQL Server и др.
Какво представляват агрегатните функции за низове?
Функциите за агрегиране на низове са набор от функции, които извършват операциите за агрегиране на набор от низове в група или редове и връщат един резултат.
Основно използваме тези функции с клаузата GROUP BY, за да групираме редовете въз основа на определена колона и след това да обединим низовете във всяка група.
Някои често срещани низови агрегатни функции включват:
- GROUP_CONCAT() – PostgreSQL и MySQL
- STRING_AGG – SQL сървър
- ARRAY_AGG – PostgreSQL
- LISTAGG – Оракул
Нека разгледаме всяка функция и какво предоставя.
GROUP_CONCAT()
Функцията GROUP_CONCAT() се поддържа от бази данни PostgreSQL и MySQL. Това ни позволява да свържем стойностите от множество редове в един низ.
Да предположим, че имаме таблица „служители“, както следва:
CREATE TABLE служители (employee_id INT AUTO_INCREMENT PRIMARY KEY,
име VARCHAR(50),
фамилно име VARCHAR(50),
отдел VARCHAR(50)
);
INSERT INTO служители (собствено_име, фамилия, отдел) СТОЙНОСТИ
(„Алис“, „Смит“, „Човешки ресурси“),
(„Боб“, „Джонсън“, „Маркетинг“),
(„Чарли“, „Уилсън“, „Финанси“),
(„Дейвид“, „Браун“, „Продажби“),
(„Ева“, „Дейвис“, „Инженеринг“);
Изход:
Ако искаме да определим пълното име на служителя, като вземем първото име и го свържем с фамилията, можем да използваме функцията GROUP_CONCAT(), както е показано в следния пример:
ИЗБЕРЕТЕотдел,
GROUP_CONCAT(първо_име, ' ', фамилно_име) КАТО пълно_име
ОТ
служители
ГРУПИРАЙ ПО
отдел;
В този случай използваме функцията, за да свържем низовете от колоните „first_name“ и „last_name“ и празен низ, за да добавим интервал към имената.
Това съдържа списък на служителите във всеки отдел.
STRING_AGG
Тази функция е подобна на функцията GROUP_CONCAT(), но се поддържа само в базата данни на SQL Server.
Примерна употреба е както следва:
ИЗБЕРЕТЕотдел,
STRING_AGG(първо_име, фамилно_име, ' ') КАТО пълно_име
ОТ
служители
ГРУПИРАЙ ПО
отдел;
Това изпълнява конкатенацията на низове в посочените колони като интервал като разделител.
ARRAY_AGG
Функцията ARRAY_AGG е достъпна само в базата данни на PostgreSQL. Това ни позволява да обединим стойностите в един масив.
Пример е следният:
ИЗБЕРЕТЕотдел,
ARRAY_AGG(първо_име) КАТО списък_на_служители
ОТ
служители
ГРУПИРАЙ ПО
отдел;
Това трябва да обедини името на служителя като масив.
LISTAGG()
Функцията LISTAGG() е достъпна само в базата данни на Oracle. Това ни позволява да свържем стойностите в един низ с определен разделител.
Пример е следният:
ИЗБЕРЕТЕ отдел, LISTAGG(first_name, last_name, ' ') WITHIN GROUP (ORDER BY employee_name ASC) AS служителиОТ служители
ГРУПИРАНЕ ПО отдел;
Това обединява имената на служителите и посочения разделител.
Заключение
В този урок научихме за функциите за обобщаване на низове, които ни позволяват да предоставим списък със стойности на низ и да извършим операция в една получена стойност на низ.