Агрегирани функции на SQL низове

Agregirani Funkcii Na Sql Nizove



Ако някога сте се занимавали с SQL бази данни, вероятно сте запознати с агрегатните функции. По същество те са набор от функции, които извършват изчисленията върху набор от стойности и връщат един резултат.

Примерът включва функции като 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 служители
ОТ служители
ГРУПИРАНЕ ПО отдел;

Това обединява имената на служителите и посочения разделител.

Заключение

В този урок научихме за функциите за обобщаване на низове, които ни позволяват да предоставим списък със стойности на низ и да извършим операция в една получена стойност на низ.