postgresql常用查询场景

1. 计算数组类型的元素之和

首先创建包含数组类型字段的表

1
2
3
4
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[4]
);

其中pay_by_quarter表示每个季度的工资数组,数组长度为4。

需求:求指定季度区间内的工资总和。

插入测试数据

1
2
3
4
INSERT INTO sal_emp
VALUES ('Bill',
'{10000, 10000, 10000, 10000}'
)

由于postgresql本身支持按照索引取值,还支持按照索引范围取值,所以,很自然想到使用区间值来实现求和的首尾季度,但如何求和呢?

1
select pay_by_quarter[1:4] from sal_emp;

查询结果如下:

1
2
3
pay_by_quarter           |
-------------------------+
[10000,10000,10000,10000]|

如何将这4个数字累加起来呢,你可能想到使用sum函数来求和,但很遗憾,sum并不支持数组类型的求和。那么,我们可不可以将数组内的数字拆分成4条数据呢,当然可以。使用unnest函数可以帮我们做到这一点。

所以最后的sql变成了这样

1
2
3
4
5
6
7
select 
sum(t.arr)
from (
select
unnest(pay_by_quarter[1:4]) arr
from sal_emp
) t

执行结果如下:

1
2
3
sum  |
-----+
40000|

正是我们想要的求和之后的结果。