官术网_书友最值得收藏!

Combining grouping sets with the FILTER clause

In real-world applications, grouping sets can often be combined with FILTER clauses. The idea behind the FILTER clause is to be able to run partial aggregates.

Here is an example:

test=# SELECT   region,                                                                                                                                  avg(production) AS all,                                                                                                                          avg(production) FILTER (WHERE year < 1990) AS old,                                                                                               avg(production) FILTER (WHERE year >= 1990) AS new                                                                                       FROM    t_oil                                                                                                                                    GROUP BY ROLLUP (region); 
region | all | old | new
---------------+----------------+----------------+----------------
Middle East | 1992.603686635 | 1747.325892857 | 2254.233333333
North America | 4541.362318840 | 4471.653333333 | 4624.349206349
| 2607.513986013 | 2430.685618729 | 2801.183150183
(3 rows)

The idea here is that not all columns will use the same data for aggregation. The FILTER clauses allow you to selectively pass data to those aggregates. In my example, the second aggregate will only consider data before 1990, while the second aggregate will take care of more recent data.

Note that if it is possible to move conditions to a WHERE clause it is always more desirable as less data has to be fetched from the table. FILTER is only useful if the data left by the WHERE clause is not needed by each aggregate.

FILTER works for all kinds of aggregates and offers a simple way to pivot your data.

主站蜘蛛池模板: 黄浦区| 尖扎县| 连山| 益阳市| 仁怀市| 灵寿县| 邵武市| 大荔县| 锡林郭勒盟| 定安县| 寻甸| 莱阳市| 安阳市| 曲阜市| 奉新县| 洪泽县| 长兴县| 沭阳县| 闻喜县| 武安市| 元阳县| 淳化县| 平塘县| 醴陵市| 英吉沙县| 延长县| 沁阳市| 张家口市| 正宁县| 广东省| 舟山市| 凤翔县| 合山市| 望奎县| 富源县| 龙川县| 鄂托克前旗| 徐汇区| 武冈市| 德兴市| 镇远县|