让我们考虑这个最小的例子:
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 ...
将unnest
子句放在string_to_array
调用周围,以便T
已经有多行: