2017-06-06 126 views
1

我在我的SQL查询中嗅探出围绕ARRAY_AGG函数运行的错误。以下是以下两行SQL。这两个类似的SQL ARRAY_TO_STRING语句有什么区别?

以下代码行是我最终希望拥有的正确且完整的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

我没有使用红宝石,但它看起来像两行之间的嵌套不同。您的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应该是用作列函数不上表集。下面是我在看一些联系,但我wan't肯定是正确的,因为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) 

只是一个猜测..