我有以下简单的查询
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键值中移除,这基本上是有效的。
我很难理解错误的确切原因,因为它几乎没有暗示性。
{"code":"ER_INVALID_GROUP_FUNC_USE","errno":1111}如果我在bets上使用bets聚合函数,而不是JSON_ARRAYAGG,查询也能工作。
如果Bets是一个聚合,为什么JSON_ARRAYAGG会抛出一个错误?
发布于 2021-12-11 03:10:16
嵌套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如果有人能进一步优化它,让我知道
https://stackoverflow.com/questions/64621537
复制相似问题