sql - 将两列和两行聚合为一

标签 sql postgresql aggregate-functions aggregate

我有如下表结构

start|end
09:00|11:00
13:00|14:00

我知道

SELECT ARRAY_AGG(start), ARRAY_AGG(end)

将导致

start|end
[09:00,13:00]|[11:00,14:00]

但是我怎样才能得到下面的结果呢? 结果

[09:00,11:00,13:00,14:00]

顺便说一句,我正在使用 Postgres

最佳答案

您可以进行数组连接(如果顺序不重要):

SELECT ARRAY_AGG(start) || ARRAY_AGG(end) FROM TABLE1

如果顺序很重要,您可以使用 Gordon's方法但是:

  • 添加聚合顺序array_agg(d order by d ASC)
  • 使用unnest 而不是union all,因为Gordon 的解决方案(union all)执行两次序列扫描。如果表很大,使用性能可能会更好:

    SELECT array_agg(d ORDER BY d ASC) FROM(
        SELECT unnest(ARRAY[start] || ARRAY[end]) as d from table1
    ) sub
    

它只对表执行一次序列扫描(而且会更快)。

关于sql - 将两列和两行聚合为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33257349/

相关文章:

php - FluentPDO 似乎无法找到执行 OR 子句的方法

mysql - 如何优化此 MySQL 报告查询的时间范围和聚合?

mysql - 选择具有 IN 范围和 LIMIT 的查询

php - 如何在数据库中存储可用的项目数量?

scala - 按列 "grp"分组并压缩 DataFrame -(按列 "ord"对每列排序取最后一个非空值)

MySQL为什么在使用聚合函数时自动求和

SQL Server : How to check if CLR is enabled?

java - 如何在 Spring 应用程序中构建层和职责?

sql - PostgreSQL 导入问题 - 除了一个导入之外的所有表

python - Python DataFrame 中 Timedelta 值的聚合