聚合函数支持FILTER过滤
功能描述
Vastbase在PG兼容模式下,聚合函数支持FILTER过滤的功能,即COUNT、SUM和AVG函数之后可以使用FILTER子句来起到过滤的作用,只有满足FILTER(WHERE)子句中条件的数据才会参与聚合操作。
注意事项
该功能仅在数据库兼容模式为PostgreSQL时能够使用(即创建DB时DBCOMPATIBILITY='PG'),在其他数据库兼容模式下不能使用该特性。
目前聚合函数仅支持COUNT、SUM和AVG函数。
支持的版本:
V2.2 Build 10(Patch No.14)及以上补丁版本。
V2.2 Build 15及以上版本。
语法格式
FILTER(WHERE filter_clause)
参数说明
filter_clause
过滤条件语句。
示例
1、创建兼容PostgreSQL的库db_pg,并进入。
CREATE DATABASE db_pg DBCOMPATIBILITY= 'PG';
\c db_pg
2、创建测试表并插入数据。
CREATE TABLE tab_1172072 (c_id int, c_name varchar(10), c_store number);
INSERT INTO tab_1172072 VALUES(101, 'Red', 100);
INSERT INTO tab_1172072 VALUES(102, 'Green', 200);
INSERT INTO tab_1172072 VALUES(103, 'Yellow', 300);
INSERT INTO tab_1172072 VALUES(101, 'Red', 120);
INSERT INTO tab_1172072 VALUES(101, 'Red', 200);
INSERT INTO tab_1172072 VALUES(103, 'Yellow', 50);
INSERT INTO tab_1172072 VALUES(103, 'Yellow', 80);
INSERT INTO tab_1172072 VALUES(102, 'Green', 20);
INSERT INTO tab_1172072 VALUES(101, 'Red', 100);
INSERT INTO tab_1172072 VALUES(102, '', 200);
INSERT INTO tab_1172072 VALUES(103, 'Yellow');
INSERT INTO tab_1172072 VALUES(101, null, 120);
INSERT INTO tab_1172072 VALUES(101, 'Red', null);
INSERT INTO tab_1172072 VALUES(103, null, 50);
INSERT INTO tab_1172072 VALUES(103, '', 80);
INSERT INTO tab_1172072 VALUES(102, 'Green', 20);
3、调用聚合函数并使用filter子句过滤。
select count(*) filter( where c_id = 101) from tab_1172072 where c_id >= 101;
select sum(c_id) filter( where c_id = 101) from tab_1172072 where c_id >= 101;
返回结果分别为:
count
-------
6
(1 row)
sum
-----
606
(1 row)