- Mastering PostgreSQL 9.6
- Hans Jurgen Schonig
- 292字
- 2021-07-09 19:57:25
Utilizing windowing functions and analytics
After discussing ordered sets, it is time to take a look at windowing functions. Aggregates follow a fairly simple principle: take many rows and turn them into fewer, aggregated rows. A windowing function is different. It compares the current row with all rows in the group. The number of rows returned does not change.
Here is an example:
test=# SELECT avg(production) FROM t_oil;
avg
-----------
2607.5139
(1 row)
test=# SELECT country, year, production, consumption, avg(production) OVER ()
FROM t_oil
LIMIT 4;
country | year | production | consumption | avg
---------+------+------------+-------------+----------
USA | 1965 | 9014 | 11522 | 2607.5139
USA | 1966 | 9579 | 12100 | 2607.5139
USA | 1967 | 10219 | 12567 | 2607.5139
USA | 1968 | 10600 | 13405 | 2607.5139
(4 rows)
The average production in our dataset is around 2.6 million barrels per day. The goal of this query is to add this value as a column. It is now easy to compare the current row to the overall average.
Keep in mind that the OVER clause is essential. PostgreSQL is not able to process the query without it:
test=# SELECT country, year, production, consumption, avg(production)
FROM t_oil;
ERROR: column "t_oil.country" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT country, year, production, consumption, avg(productio...
This actually makes sense because the average has to be defined precisely. The database engine cannot just take any value, which might be right by doing guesswork.
- 工業機器人產品應用實戰
- 空間機器人遙操作系統及控制
- Java實用組件集
- Hands-On Linux for Architects
- 數據挖掘方法及天體光譜挖掘技術
- AutoCAD 2012中文版繪圖設計高手速成
- 完全掌握AutoCAD 2008中文版:機械篇
- Kubernetes for Developers
- INSTANT Drools Starter
- LAMP網站開發黃金組合Linux+Apache+MySQL+PHP
- 基于神經網絡的監督和半監督學習方法與遙感圖像智能解譯
- Learning ServiceNow
- 智能鼠原理與制作(進階篇)
- C#求職寶典
- Moodle 2.0 Course Conversion(Second Edition)