2017-06-06 130 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) 

只是一個猜測..