如何在 postgreSQL 的一行中获取多个值?

Posted

技术标签:

【中文标题】如何在 postgreSQL 的一行中获取多个值?【英文标题】:How to get multiple value in one row in postgreSQL? 【发布时间】:2019-01-02 10:17:07 【问题描述】:

我在 postgreSQL9.4 中有数据库表名 emp_leave,比如

|emp_name|leave_type|total_lday|
| Tame   |    PL    |     3    |
| Tame   |    UL    |     4    |

我想要这样的查询结果

|emp_name|paid_leave|unpaid_leave|
| Tame   |    3     |      4     |    

【问题讨论】:

【参考方案1】:

Postgresql 9.4 也有 FILTER 子句来做条件聚合:

select emp_name, 
       max(total_lday) FILTER (where leave_type = 'PL') as paid_leave,
       max(total_lday) FILTER (where leave_type = 'UL') as unpaid_leave
from emp_leave
group by emp_name

(ANSI SQL-2016,功能 T612,“高级 OLAP 操作”。)

【讨论】:

【参考方案2】:

您可以在下面尝试 - 使用条件聚合

select emp_name, 
  max(case when leave_type='PL' then total_lday end) as paid_leave,
  max(case when leave_type='UL' then total_lday end) as unpaid_leave
from emp_leave
group by emp_name

【讨论】:

以上是关于如何在 postgreSQL 的一行中获取多个值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 SQL 中的多个连接条件的情况下获取同一行中的所有值?

PostgreSQL:如何将多行的值放在不同的列中,并将所有值合并到一行中?

我的表有多个列,我想获取每列中的值计数并在 postgresql 中分别显示每列的计数值

如何在postgresql的列中针对单个记录选择多个值[重复]

当组归属取决于前一行时,如何在 postgresql 中标记组?

如何使用 postgresql 按多列中表示的值进行聚合