代码之家  ›  专栏  ›  技术社区  ›  MMzztx

mariadb中的聚合函数

  •  1
  • MMzztx  · 技术社区  · 6 年前

    我是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
    

    马里亚行有办法吗? 提前谢谢你!

    3 回复  |  直到 6 年前
        1
  •  5
  •   Pawan Singh    6 年前

    创建一个 aggregate function 在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;
    

    会工作。

        2
  •  1
  •   markusjm    6 年前

    您可以通过包装 GROUP_CONCAT 使用括号 CONCAT

    SELECT column1, CONCAT('[', GROUP_CONCAT(column2), ']') AS column2 FROM table GROUP BY column1;
    
        3
  •  0
  •   cebe Allain Lalonde    5 年前

    你可以用康卡特小组,我想那会帮你找到你想要的东西。

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