【问题标题】:How is it possible to order the array returned by json_arrayagg() in Mysql?如何在 Mysql 中对 json_arrayagg() 返回的数组进行排序?
【发布时间】:2020-11-24 21:46:47
【问题描述】:

我想对 json_arrayagg() 返回的数组进行排序。 我的查询与此类似:-

select A, json_arrayagg(json_obj('X',value1, 'Y',value2)) AS RESULT
FROM (derived table)
GROUP BY A.

我想要的是我希望返回的数组按 value2 排序。 我尝试在末尾添加 order by 子句(例如 order by value2:它不起作用)

已尝试在 json_arrayagg() 中添加 order by ..(如:json_arrayagg(json_obj() order by value2)它不起作用。

尝试使用 group_concat ,但它不可靠,不知道为什么它没有返回正确的数据。已检查限制。

请建议我如何解决这个问题? 谢谢

【问题讨论】:

  • @Gordon Linoff,你能帮帮我吗!
  • 。 .不幸的是,MySQL 并没有正式支持该功能——即使在子查询中有ORDER BY。有一个 hacky 解决方案,但不能保证它有效。
  • @Gordon Linoff,没有捷径可做,所以我尝试将所需派生表中的有序值传递给 JSON_ARRAYAGG。但是,我还是想知道 hacky 解决方案~谢谢 :)

标签: mysql sql json sql-order-by aggregate


【解决方案1】:

显然,有一个 hack 可能会奏效:

SELECT A, json_arrayagg(json_obj('X',value1, 'Y',value2)) AS RESULT
FROM (SELECT . . .,
             ROW_NUMBER() OVER (ORDER BY value2) as seqnum
      FROM . . . 
      . . . 
     ) x
GROUP BY A;

ROW_NUMBER() - 显然 - 设法对结果集进行排序,即使 ORDER BY 不起作用。

【讨论】:

    猜你喜欢
    • 2018-04-08
    • 2013-09-14
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多