Агрегатная функция в mariaDB - PullRequest
0 голосов
/ 08 июня 2018

Я новичок в 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?Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Эмулировать его можно, заключив GROUP_CONCAT в скобки, используя CONCAT.

SELECT column1, CONCAT('[', GROUP_CONCAT(column2), ']') AS column2 FROM table GROUP BY column1;
0 голосов
/ 08 июня 2018

Создание агрегатной функции в 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;

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

0 голосов
/ 08 июня 2018

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

SELECT column1, GROUP_CONCAT(column2) AS column2 FROM table GROUP BY column1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...