- 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.
- 大數據導論:思維、技術與應用
- Dreamweaver CS3 Ajax網頁設計入門與實例詳解
- 我的J2EE成功之路
- Hands-On Artificial Intelligence on Amazon Web Services
- 軟件架構設計
- Windows 8應用開發實戰
- HBase Design Patterns
- Ceph:Designing and Implementing Scalable Storage Systems
- 影視后期編輯與合成
- 過程控制系統
- 機器人人工智能
- Windows安全指南
- Artificial Intelligence By Example
- 一步步寫嵌入式操作系統
- Machine Learning with Spark(Second Edition)