我是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这样做? 提前谢谢!
答案 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_CONCAT
将CONCAT
括在括号中来模拟它。
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