2016-09-23 654 views

回答

2

這是不可能與傳統的SQL聚合函數,但它是可能的standard SQL及其聚合函數STRING_AGG(相當於GROUP_CONCAT在傳統SQL)和ARRAY_AGG(相當於NEST)。這兩種功能均支持「Using LIMIT with aggregate functions」中所述的可選LIMIT子句。

例如:

select string_agg(x LIMIT 2) 
from unnest(['hello', 'world!', 'foo', 'bar', 'baz']) x 

返回'hello,world!'串,和

select array_agg(x LIMIT 2) 
from unnest(['hello', 'world!', 'foo', 'bar', 'baz']) x 

['hello', 'world!']返回陣列。

0

對於Legacy SQL

SELECT GROUP_CONCAT_UNQUOTED(x) FROM (
    SELECT x FROM 
    (SELECT 'hello' AS x), 
    (SELECT 'world!' AS x), 
    (SELECT 'foo' AS x), 
    (SELECT 'bar' AS x), 
    (SELECT 'baz' AS x), 
LIMIT 2 
) 

SELECT NEST(x) FROM (
    SELECT x FROM 
    (SELECT 'hello' AS x), 
    (SELECT 'world!' AS x), 
    (SELECT 'foo' AS x), 
    (SELECT 'bar' AS x), 
    (SELECT 'baz' AS x), 
LIMIT 2 
) 

它們分別返回'hello,world!'串和['hello', 'world!'] 「陣列」

下面

是例如用GROUP BY

SELECT id, GROUP_CONCAT_UNQUOTED(x) FROM (
    SELECT id, x, ROW_NUMBER() OVER(PARTITION BY id) AS num FROM 
    (SELECT 1 AS id, 'hello' AS x), 
    (SELECT 1 AS id, 'world!' AS x), 
    (SELECT 1 AS id, 'foo' AS x), 
    (SELECT 1 AS id, 'bar' AS x), 
    (SELECT 1 AS id, 'baz' AS x), 
    (SELECT 2 AS id, 'hello2' AS x), 
    (SELECT 2 AS id, 'world2!' AS x), 
    (SELECT 2 AS id, 'foo2' AS x), 
    (SELECT 2 AS id, 'bar2' AS x), 
    (SELECT 2 AS id, 'baz2' AS x), 
) 
WHERE num < 3 
GROUP BY id 
+0

但是,這個解決方案不適用於作爲原始問題一部分的GROUP BY(但爲了簡化,示例省略了它)。 –

+0

添加了「GROUP BY」示例 –