- Mastering PostgreSQL 10
- Hans Jürgen Sch?nig
- 286字
- 2021-06-30 19:04:02
Utilizing windowing functions and analytics
Now we have discussed 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 guess at any value.
- 玩轉智能機器人程小奔
- 計算機應用
- 實時流計算系統設計與實現
- Learning Apache Spark 2
- Blockchain Quick Start Guide
- Mastering Salesforce CRM Administration
- 數據庫原理與應用技術
- 氣動系統裝調與PLC控制
- 手機游戲程序開發
- Applied Data Visualization with R and ggplot2
- Hands-On Data Warehousing with Azure Data Factory
- Hands-On DevOps
- Raspberry Pi 3 Projects for Java Programmers
- 網絡規劃與設計
- AWS Administration:The Definitive Guide(Second Edition)