MariaDB
 sql >> база данни >  >> RDS >> MariaDB

MariaDB JSON_ARRAYAGG() Обяснено

В MariaDB, JSON_ARRAYAGG() е вградена функция, която връща JSON масив, съдържащ елемент за всяка стойност в даден набор от JSON или SQL стойности.

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

Синтаксис

Синтаксисът е така:

JSON_ARRAYAGG([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [LIMIT {[offset,] row_count | row_count OFFSET offset}]) 

Пример

Да предположим, че правим заявка за таблица:

SELECT PetName
FROM Pets; 

И вземете следния набор от резултати:

+--------+| Име на домашни любимци |+---------+| Пухкави || Извличане || Надраскване || Размахване || Tweet || Пухкави || Кора || Мяу |+--------+

Резултатът е една колона и всеки ред съдържа различно име на домашен любимец.

Да кажем, че искаме всички домашни любимци да бъдат изброени в JSON масив (така че всяко име на домашен любимец да е свой собствен елемент от масива).

Можем да използваме JSON_ARRAYAGG() функция, за да направи точно това:

SELECT JSON_ARRAYAGG(PetName)
FROM Pets; 

Резултат:

+------------------------------------------------------- ---------------------+| JSON_ARRAYAGG(име на домашни любимци) |+-------------------------------------------- -----------------------+| ["Fluffy","Fetch","Scratch","Wag","Tweet","Fluffy","Bark","Meow"] |+--------------- -------------------------------------------------- --+

Всичко, което направихме, беше да предадем името на колоната на JSON_ARRAYAGG() функция.

Отличи резултати

Можем да добавим DISTINCT клауза за премахване на дублиращи се стойности от масива:

SELECT JSON_ARRAYAGG(DISTINCT PetName)
FROM Pets; 

Резултат:

+------------------------------------------------------- ------------+| JSON_ARRAYAGG(DISTINCT PetName) |+------------------------------------------- ---------------+| ["Лая","Извличане","Пухкаво","Мяу","Скреч","Туит","Размахване"] |+------------------- ---------------------------------------+

Забележете, че Fluffy беше включен само веднъж тук, докато Fluffy беше включен два пъти в предишния пример (тъй като има два домашни любимци, наречени Fluffy ).

Поръчайте резултатите

Можем да използваме ORDER BY клауза за определяне на реда за елементите на масива:

SELECT JSON_ARRAYAGG(PetName ORDER BY PetName DESC)
FROM Pets; 

Резултат:

+------------------------------------------------------- ---------------------+| JSON_ARRAYAGG(Име на домашни любимци ПОРЪЧАЙТЕ ПО DESC) |+---------------------------------------- ---------------------------+| ["Wag","Tweet","Scratch","Meow","Fluffy","Fluffy","Fetch","Bark"] |+--------------- -------------------------------------------------- --+

Ограничете резултатите

Можем да използваме LIMIT клауза за определяне на реда за елементите на масива:

SELECT JSON_ARRAYAGG(PetName LIMIT 3)
FROM Pets; 

Резултат:

+--------------------------------+| JSON_ARRAYAGG(ОГРАНИЧЕНИЕ на името на любимеца 3) |+--------------------------------+| ["Fluffy","Fetch","Scratch"] |+--------------------------------+ 

Можем също да използваме отместване за LIMIT клауза:

SELECT JSON_ARRAYAGG(PetName LIMIT 3 OFFSET 2)
FROM Pets; 

Резултат:

+-----------------------------------+| JSON_ARRAYAGG(PetName LIMIT 3 OFFSET 2) |+---------------------------------------- -+| ["Scratch","Wag","Tweet"] |+----------------------------------- ------+

Като алтернатива можем да пропуснем LIMIT и OFFSET ключови думи и сменете числата (и ги разделете със запетая), за да постигнете същия резултат:

SELECT JSON_ARRAYAGG(PetName LIMIT 2, 3)
FROM Pets; 

Резултат:

+---------------------------------+| JSON_ARRAYAGG(PetName LIMIT 2, 3) |+----------------------------------+| ["Scratch","Wag","Tweet"] |+----------------------------------- +

Групирани резултати

Можем да използваме SQL GROUP BY клауза за създаване на масиви въз основа на групиране на друга колона.

Да предположим, че добавяме колона към нашата оригинална заявка:

SELECT 
    PetTypeId,
    PetName
FROM Pets; 

Резултат:

+-----------+--------+| PetTypeId | Име на домашни любимци |+----------+--------+| 2 | Пухкави || 3 | Извличане || 2 | Надраскване || 3 | Размахване || 1 | Tweet || 3 | Пухкави || 3 | Кора || 2 | Мяу |+-----------+--------+

Сега имаме PetTypeId колона, както и PetName колона. Това съответства на тип домашен любимец за всяко име.

Ето пример за използване на GROUP BY клауза за групиране на нашите резултати по PetTypeId колона, докато използвате JSON_ARRAYAGG() функция:

SELECT 
    PetTypeId,
    JSON_ARRAYAGG(PetName)
FROM Pets
GROUP BY PetTypeId; 

Резултат:

+-----------+--------------------------------+ | PetTypeId | JSON_ARRAYAGG(име на домашни любимци) |+----------+-------------------------------- -+| 1 | ["Туит"] || 2 | ["Fluffy","Scratch","Meow"] || 3 | ["Извличане","Wag","Fluffy","Bark"] |+-----------+------------------- --------------+

Това ни позволи да създадем отделен масив за всеки тип домашен любимец.

Следната заявка използва INNER JOIN на друга таблица, за да върнете действителния тип домашен любимец, а не само ID.

SELECT 
    pt.PetType,
    p.PetName
FROM Pets p 
INNER JOIN PetTypes pt 
ON pt.PetTypeId = p.PetTypeId
ORDER BY PetType; 

Резултат:

+--------+--------+| PetType | Име на домашни любимци |+---------+--------+| Птица | Tweet || Котка | Надраскване || Котка | Пухкави || Котка | Мяу || Куче | Размахване || Куче | Извличане || Куче | Кора || Куче | Пухкав |+---------+--------+

Можем да видим, че всеки тип домашен любимец е посочен в първата колона, а името на домашния любимец е посочено във втората колона.

Сега нека използваме JSON_ARRAYAGG() функция:

SELECT 
    pt.PetType,
    JSON_ARRAYAGG(p.PetName)
FROM Pets p 
INNER JOIN PetTypes pt 
ON pt.PetTypeId = p.PetTypeId
GROUP BY pt.PetType; 

Резултат:

+--------+--------------------------+| PetType | JSON_ARRAYAGG(p.PetName) |+---------+--------------------------+| Птица | Tweet || Котка | Драскане, пухкаво, мяу || Куче | Размахване, качване, лаене, пухкаво |+---------+--------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи FROM_DAYS() в MariaDB

  2. 8 начина за добавяне на микросекунди към стойност за дата и час в MariaDB

  3. Как работи RPAD() в MariaDB

  4. Балансиране на натоварването на MariaDB MaxScale на Docker:Управление:Част втора

  5. Как DATE_ADD() работи в MariaDB