row_number()总是返回1,因为源表只有一行]]

问题描述 投票:0回答:1

让我们考虑这个最小的例子:

SELECT row_number() over() as GID, 
       unnest(myarray)     as letter
FROM 
(
    SELECT string_to_array('a,b,b', ',') as myarray
) AS T

现在,由于表T仅包含一个元素,因此即使返回3行,row_number()函数也始终返回1

所以我得到:

GID   letter
1     "a"
1     "b"
1     "b"

代替

GID   letter
1     "a"
2     "b"
3     "b"

如何解决?

编辑:

我找到了答案:

SELECT row_number() over(order by unnest(myarray)) as GID, 
       unnest(myarray)                             as letter
FROM 
(
    SELECT string_to_array('a,b,b', ',') as myarray
) AS T

但是我必须重复unnest(myarray)部分,有更好的解决方案吗?

让我们考虑这个最小的例子:SELECT row_number()over()作为GID,unnest(myarray)作为字母FROM(SELECT string_to_array('a,b,b',',')作为myarray)AS T从表开始T ...

postgresql postgis row-number
1个回答
0
投票

unnest子句放在string_to_array调用周围,以便T已经有多行:

© www.soinside.com 2019 - 2024. All rights reserved.