Агрегатная функция в mariaDB

Я новичок в mariadb, и я использовал MySQL для разработки чего-то, после переключения на mariadb он не работает, часть ошибки, которую я нахожу, находится в 'JSON_ARRAYAGG', ранее я использовал JSON_ARRAYAGG для объединения результата в виде массива по Группе по как показано ниже

SELECT column1, JSON_ARRAYAGG(column2) AS column2 FROM table GROUP BY column1;

Трансформация

column1    column2               column1    column2
1            a                      1       ['a','b']
1            b                      2       ['cc','dd']
2            cc          --->       3       ['e']
2            dd
3            e

Есть ли способ сделать это в мариадбе? Заранее спасибо!

Я считаю, что вы могли бы использовать функцию MariaDB JSON_ARRAY и написать свою собственную агрегатную функцию, которая полагается на это, а затем использовать ее :-) mariadb.com/kb/en/library/stored-aggregate-functions

Kamil Gosciminski 07.06.2018 23:37

Внимание - JSON был разработан независимо между MySQL и MariaDB; вы найдете множество различий.

Rick James 08.06.2018 19:27

Информация: Здесь вы можете найти обзор различий в функциях MySQL и MariaDB: mariadb.com/kb/en/library/…

jengeb 20.09.2019 11:55
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
4
3
3 680
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать GROUP_CONCAT, я думаю, это даст вам то, что вы ищете.

SELECT column1, GROUP_CONCAT(column2) AS column2 FROM table GROUP BY column1

Вы можете подражать этому, заключив GROUP_CONCAT в скобки, используя CONCAT.

SELECT column1, CONCAT('[', GROUP_CONCAT(column2), ']') AS column2 FROM table GROUP BY column1;
Ответ принят как подходящий

Создание агрегатная функция в MariaDB v10.3.3:

DELIMITER //

DROP FUNCTION IF EXISTS JSON_ARRAYAGG//

CREATE AGGREGATE FUNCTION IF NOT EXISTS JSON_ARRAYAGG(next_value TEXT) RETURNS TEXT
BEGIN  

 DECLARE json TEXT DEFAULT '[""]';
 DECLARE CONTINUE HANDLER FOR NOT FOUND RETURN json_remove(json, '$[0]');
      LOOP  
          FETCH GROUP NEXT ROW;
          SET json = json_array_append(json, '$', next_value);
      END LOOP;  

END //
DELIMITER ;

И используйте это так:

SELECT column1, JSON_ARRAYAGG(column2) AS column2 FROM table GROUP BY column1;

будет работать.

Другие вопросы по теме