我在我的SQL查询中嗅出了一个围绕ARRAY_AGG
函数的错误。下面是以下两行SQL。
以下行是我最终希望拥有的正确且完整的SQL版本。此行为是导致正确查询的行为。
ARRAY_TO_STRING((ARRAY_AGG(R.version ORDER BY R.released_on DESC))[1:10], ', ')
这一行在这里我认为是等价的,但是当我执行这行SQL时,我会收到ERROR: more than one row returned by a subquery used as an expression
ARRAY_TO_STRING(ARRAY_AGG((SELECT "releases"."version" FROM "releases" ORDER BY "releases"."released_on" DESC LIMIT 10)), ',')
我通过arel到达这一行的SQL并且证明有点挑战但是两行可能是等价的吗?第一行是切片数组以检索10个项目,而第二行基本上是做同样的事情,尽管是行。这可能会被调整,还是需要重写?
答案 0 :(得分:0)
我还没有使用红宝石,但它看起来像是两条线之间不同的嵌套。您的ARRAY_AGG正在获取两组不同的数据。
第一:
ARRAY_AGG(R.version ORDER BY R.released_on DESC)
第二
ARRAY_AGG((SELECT "releases"."version" FROM "releases" ORDER BY "releases"."released_on" DESC LIMIT 10))
在那里我认为你的第二个陈述是错误的,从我在网上看到的看起来ARRAY_AGG看起来应该用作不在表集上的列函数。以下是我正在查看的一些链接,但我不确定哪个是正确的,因为ARRAY_AGG看起来像是一个sql函数而且我不确定你使用的是什么味道...
https://msdn.microsoft.com/en-us/library/azure/mt763803.aspx
https://www.postgresql.org/docs/8.4/static/functions-aggregate.html
我认为它应该是这样的:
(SELECT ARRAY_AGG("releases"."version") FROM "releases" ORDER BY "releases"."released_on" DESC LIMIT 10)
只是一个猜测..