【问题标题】:Aggregate function in mariaDBmariaDB 中的聚合函数
【发布时间】:2018-11-17 21:49:01
【问题描述】:

我是 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 中有没有办法做到这一点? 提前谢谢!

【问题讨论】:

标签: mysql mariadb


【解决方案1】:

在 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;

会起作用的。

【讨论】:

    【解决方案2】:

    您可以通过使用CONCATGROUP_CONCAT 用括号括起来来模拟它。

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

    【讨论】:

      【解决方案3】:

      您可以使用 GROUP_CONCAT,我认为这会得到您想要的。

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

      【讨论】:

        【解决方案4】:

        JSON_OBJECTAGG MariaDB 从 10.5.0 开始

        在 MariaDB 10.5.0 中添加了 JSON_OBJECTAGG。 和 : JSON_ARRAYAGG 在 MySQL 5.7.22 中引入。

        如果函数名称和括号之间有空格 (JSON_OBJECTAGG ("item", item.item_id))。 MySQL 默认将does not handle 函数名作为内置函数。

        您可以删除函数名和括号之间的空格或使用 sql_mode IGNORE_SPACE。更容易不使用空间。

        【讨论】:

          猜你喜欢
          • 2019-03-06
          • 2021-04-07
          • 2023-03-20
          • 2021-12-31
          • 2011-04-08
          • 2018-05-15
          • 2021-12-31
          • 2017-05-10
          • 1970-01-01
          相关资源
          最近更新 更多