Postgresql,同时对记录进行字符串连接和排序

标签 postgresql

我有一组带有“数据”字段的记录,它实际上是一个 JSON 对象。我想在排序后连接一组特定记录的这些 JSON 对象。

这是我的查询:

select string_agg(data, ', ') 
       from timeseriesdata TS, atomicseries AT 
       where AT.timeseriesdata_ptr_id = TS.id 
       AND AT.atomic_id = 11 AND date between '2016-03-01' and '2016-03-30'

上面(几乎)做了我想要的,但是我想知道是否可以按 TS 表的字段 timestamp 对数据进行排序。

最佳答案

您不能在 ORDER BY 子句中指定顺序,因为此时您只剩下一行,其中包含聚合在一个单一行中的所有 data字符串(因此您不再有一个 ts 列来排序)。

您需要在 STRING_AGG 函数中指定 ORDER BY:

-- unspecified order
WITH d(ts, data) AS (
  VALUES
    (1 , 'json1'),
    (2 , 'json2'),
    (10, 'json10'),
    (3 , 'json3')
)
SELECT STRING_AGG(data, ',')
FROM d
;
┌──────────────────────────┐
│        string_agg        │
├──────────────────────────┤
│ json1,json2,json10,json3 │
└──────────────────────────┘
(1 row)

-- ORDERed BY ts
WITH d(ts, data) AS (
  VALUES
    (1 , 'json1'),
    (2 , 'json2'),
    (10, 'json10'),
    (3 , 'json3')
)
SELECT STRING_AGG(data, ',' ORDER BY ts)
FROM d
;
┌──────────────────────────┐
│        string_agg        │
├──────────────────────────┤
│ json1,json2,json3,json10 │
└──────────────────────────┘
(1 row)

关于Postgresql,同时对记录进行字符串连接和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44799732/

相关文章:

sql - 仅对具有多行的组求和值

django - 将 postgres 转储迁移到 RDS

sql - postgres中的嵌套选择

sql - 获取具有 max(timestamp) 的行

mysql - 设计一个数据库来处理产品变化的库存跟踪

java - 从同一实体上的内部连接获取 Hibernate 实体

sql - 需要帮助编写 SQL 触发器

postgresql - pgjdbc中prepareThreshold = 5有什么好处?

javascript - 当发生写入数据库的并发 API 调用时(或者当服务器速度缓慢时),防止竞争情况

java - JDBC 和 PostgreSQL - 如何根据另一个 int 在同一行中插入 int