mariaDB中的聚合函数

时间:2018-06-07 21:24:52

标签: mysql 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这样做? 提前谢谢!

3 个答案:

答案 0 :(得分:4)

在MariaDB v10.3.3中创建aggregate function

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;

会奏效。

答案 1 :(得分:1)

您可以使用GROUP_CONCATCONCAT括在括号中来模拟它。

SELECT column1, CONCAT('[', GROUP_CONCAT(column2), ']') AS column2 FROM table GROUP BY column1;

答案 2 :(得分:0)

你可以使用GROUP_CONCAT,我认为这会让你得到你想要的东西。

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