如何使用string_agg对转换后的字段进行排序

时间:2018-09-03 13:02:37

标签: sql postgresql sorting

如何对转换后的字段进行排序。有类似的问题,但是我不知道为什么它对我不起作用

-“数字”字段是整数

string_agg(distinct cast(number as varchar(4)) , ', ')

但是结果以非常奇怪的随机顺序返回

Results
12,11,10,1,29

我只是希望它通常按1,10,11,12,29

排序

我根据可用的帖子尝试了此代码,但没有成功,并收到了以下错误消息

string_agg(
    distinct cast(number as varchar(4)),', ' order by number) 
    as SPJ

--ERROR: in an aggregate with distinct order by expressions must appear in argument list  

所以也尝试了这个,而不是我想要的答案

string_agg(
    distinct cast(number as varchar(4)) , ', ' order by
                            cast(number as varchar(4))) as SPJ
results 
10,11,8,9

我在做什么错了?

1 个答案:

答案 0 :(得分:3)

由于类型的原因,这一切都很复杂-字符串的排序方式与数字不同。因此,您可以使用数组来代替:

with t as (
      select num
      from (values (1), (10), (11), (12), (29), (2)) v(num)
     )
select array_to_string(array_agg(distinct num order by num), ', ')
from t ;