繁体   English   中英

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

[英]Invalid group of use function using nested JSON_ARRAYAGG()

我有以下简单的查询

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

如果我从第一个JSON_OBJECT键值中删除bets ,这将非常有效。

我很难理解错误的确切原因,因为它没有什么启发性。

{"code":"ER_INVALID_GROUP_FUNC_USE","errno":1111}

如果我在bets上使用JSON_ARRAY聚合函数而不是JSON_ARRAYAGG ,则该查询也有效。

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

不允许使用嵌套的 JSON_ARRAYAGG,而必须使用嵌套查询。 我已经修改了您的查询以下应该工作

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

如果有人可以进一步优化它,请告诉我

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM