首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用嵌套JSON_ARRAYAGG()的无效使用函数组

使用嵌套JSON_ARRAYAGG()的无效使用函数组
EN

Stack Overflow用户
提问于 2020-10-31 12:05:35
回答 1查看 662关注 0票数 2

我有以下简单的查询

代码语言:javascript
复制
select 
    jrt.threadId,
    JSON_ARRAYAGG(
        JSON_OBJECT(
        'roundId',jrr.roundId,
        'bets', JSON_ARRAYAGG(
                    JSON_OBJECT(
                        'betId', bets.betId,
                        'amount', bets.amount
                    )
            )
        )
    ) as rounds
from threads jrt
    left join rounds jrr on jrt.threadId = jrr.threadId
            left join bets on jrr.roundId= bets.roundId
group by jrt.threadId

如果我将bets从第一个JSON_OBJECT键值中移除,这基本上是有效的。

我很难理解错误的确切原因,因为它几乎没有暗示性。

代码语言:javascript
复制
{"code":"ER_INVALID_GROUP_FUNC_USE","errno":1111}

如果我在bets上使用bets聚合函数,而不是JSON_ARRAYAGG,查询也能工作。

如果Bets是一个聚合,为什么JSON_ARRAYAGG会抛出一个错误?

EN

回答 1

Stack Overflow用户

发布于 2021-12-11 03:10:16

嵌套JSON_ARRAYAGG是不允许的,相反,您必须使用嵌套查询。我修改了您的查询,如下所示

代码语言:javascript
复制
select 
            jrt.threadId,
            JSON_ARRAYAGG(
                JSON_OBJECT(
                'roundId',jrr.roundId,
                'bets',( select  JSON_ARRAYAGG(
                            JSON_OBJECT(
                                'betId', bets.betId,
                                'amount', bets.amount
                            ) from threads jrt
            left join rounds jrr on jrt.threadId = jrr.threadId
                    left join bets on jrr.roundId= bets.roundId
                    ))
                )
            ) as rounds
        from threads jrt
            left join rounds jrr on jrt.threadId = jrr.threadId
                    left join bets on jrr.roundId= bets.roundId
        group by jrt.threadId

如果有人能进一步优化它,让我知道

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64621537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档