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

标签 sql postgresql sorting

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

-- 'number' 字段是一个整数

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

我做错了什么?

最佳答案

由于类型的原因,这一切都很复杂——字符串的排序方式与数字不同。因此,您可以改用数组来执行此操作:

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 ;

关于sql - 如何使用 string_agg 对转换后的字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52150351/

相关文章:

sql - PostgreSQL 通配符 LIKE 用于子查询返回的任何单词列表

sql - 是否有 SQL 关键字表示 "Don' t Change”?

mysql - 这是 MySQL JOIN 吗?

postgresql - 如何准确确定边界附近的点和地理的 ST_Intersects(ST_Intersects geography vs. Geometry diffrepancy)

Ruby:为什么 Array.sort 对大对象很慢?

java - 如何按字段对自定义对象的集合进行排序,该字段本身就是一个对象java

sql - Linq To Sql - SQL 默认约束问题

database - 使用 Docker gitlab-ce 镜像安装 GitLab

postgresql - 为什么 PostgreSQL 的\dt 只显示公共(public)模式表?

java - 在 Java 中,为什么在使用二进制搜索搜索数组时返回负数?