窗口函数类似与汇聚函数,不同的是汇聚函数会将 记录集数据 汇聚 成一条记录,而窗口函数则不会,窗口函数也是作用在记录集上,但返回结果不会减少记录行数。

下面给出具体例子:

我们创建产品和产品组两张表:

CREATE TABLE product_groups (
group_id serial PRIMARY KEY,
group_name VARCHAR (255) NOT NULL
);
CREATE TABLE products (
product_id serial PRIMARY KEY,
product_name VARCHAR (255) NOT NULL,
price DECIMAL (11, 2),
group_id INT NOT NULL,
FOREIGN KEY (group_id) REFERENCES product_groups (group_id)
);
INSERT INTO product_groups (group_name)
VALUES
('Smartphone'),
('Laptop'),
('Tablet');
INSERT INTO products (product_name, group_id,price)
VALUES
('Microsoft Lumia', 1, 200),
('HTC One', 1, 400),
('Nexus', 1, 500),
('iPhone', 1, 900),
('HP Elite', 2, 1200),
('Lenovo Thinkpad', 2, 700),
('Sony VAIO', 2, 700),
('Dell Vostro', 2, 800),
('iPad', 3, 700),
('Kindle Fire', 3, 150),
('Samsung Galaxy Tab', 3, 200);
汇聚函数avg计算每个产品组的平均价为例:
sql语句:
SELECT
group_name,
AVG (price)
FROM
products
INNER JOIN product_groups USING (group_id)
GROUP BY
group_name;

结果:
group_name |         avg

------------+----------------------
Tablet     | 600
Smartphone | 500
Laptop     | 800
(3 rows)

窗口功能:
SQL
SELECT
product_name,
price,
group_name,
AVG (price) OVER (PARTITION BY group_name)
FROM
products
INNER JOIN product_groups USING (group_id);
结果:
product_name    |  price  | group_name |         avg

--------------------+---------+------------+----------------------
HP Elite           |  900.00 | Laptop     | 800
Lenovo Thinkpad    | 1100.00 | Laptop     | 800
Sony VAIO          |  600.00 | Laptop     | 800
Dell Vostro        |  600.00 | Laptop     | 800
Microsoft Lumia    |  300.00 | Smartphone | 500
HTC One            |  400.00 | Smartphone | 500
Nexus              |  500.00 | Smartphone | 500
iPhone             |  800.00 | Smartphone | 500
iPad               |  700.00 | Tablet     | 600
Kindle Fire        |  300.00 | Tablet     | 600
Samsung Galaxy Tab |  800.00 | Tablet     | 600
(11 rows)

窗口函数语法:
window_function(arg1, arg2,..) OVER (PARTITION BY expression ORDER BY expression)

一个窗口函数执行在 JOIN, WHERE, GROUP BY 和HAVING子句之后,ORDER BY 子句之前。
内嵌窗口函数:
row_number(), rank(), dense_rank()
first_value(), last_value(), nth_value()
LAG(), LEAD() 等

postgresql 窗口函数相关推荐

  1. PostgresQL窗口函数 last_value未返回预期结果原因排查

    这是一篇个人学习笔记,仅供参考. 窗口函数(window function),或开窗函数,主要有以下几个: row_number():无重复排序 rank():并列跳排,数字不连续 desc_rank ...

  2. PostgreSQL 窗口函数复习笔记

    在总结hive之前特地回去复习了一下,以前PostgreSQL的窗口函数(MySQL目前还没有支持),以下基于版本9.3实验. 我们都知道在sql中有一类函数叫做聚合函数,例如sum().avg(). ...

  3. PostgreSQL窗口函数

    1. 需求背景 假设有如下简单的公司员工工资表(dep_salary) id employee_name department salary 1 张三 HR部 12000.00 2 李四 HR部 15 ...

  4. 《PostgreSQL开发指南》电子版PDF免费下载

    为了方便大家阅读学习,制作了<PostgreSQL 开发指南>专栏的电子版PDF,免费开放下载:https://github.com/dongxuyang1985/postgresql_d ...

  5. 窗口函数rows between 、range between的使用

    1 rows between rows between 控制窗口函数的范围 使用rows between可以根据自己的需求任意的控制窗口函数的范围 UNBOUNDED :不受控的,无限的: PRECE ...

  6. python函数知识点总结_函数总结_python函数总结_高中函数知识点总结 - 云+社区 - 腾讯云...

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! postgresql窗口函数总结postgresql窗口函数总结 1窗口函数说明 ...

  7. postgresql之窗口函数

    postgresql之窗口函数 工作中可能会遇到按照部门业绩排名?找出前N的员工进行业绩奖励?两次消费时间隔了多久?等等这样的问题. 对于这样的问题,使用窗口函数能很好的简化sql. 窗口函数是sql ...

  8. postgresql 动态添加过滤条件_通过窗口函数进行过滤导致Postgresql

    好的,最初这只是我们与我的一个朋友的笑话,但它变成了有趣的技术问题:) 我有以下的表格: CREATE TABLE stuff ( id serial PRIMARY KEY, volume inte ...

  9. 《PostgreSQL 开发指南》第 21 篇 窗口函数

    <PostgreSQL 开发指南>专栏目录 第 01 篇 课程介绍 第 02 篇 PostgreSQL 简介 第 03 篇 PostgreSQL 安装 第 04 篇 角色与用户 第 05 ...

  10. postgresql 查询序列_时间序列数据库(TSDB)初识与选择

    背景 这两年互联网行业掀着一股新风,总是听着各种高大上的新名词.大数据.人工智能.物联网.机器学习.商业智能.智能预警啊等等. 以前的系统,做数据可视化,信息管理,流程控制.现在业务已经不仅仅满足于这 ...

最新文章

  1. Xamarin Essentials教程地理定位Geolocation
  2. 白话Elasticsearch31-深入聚合数据分析之bucket与metric
  3. lintcode:形状工厂
  4. 第4课第4节_Android灯光系统_源码分析_电池灯
  5. 33. 搜索旋转排序数组(013)二分查找+思路详解+来干了这杯代码!!!!!!
  6. cadence快捷键修改文件_PCB快捷键设置
  7. LOJ#3085. 「GXOI / GZOI2019」特技飞行(KDtree+坐标系变换)
  8. 【论文笔记】中文词向量论文综述(一)
  9. 从技术到求职,强烈推荐一下这9个牛逼的公众号,技术人必备
  10. 谐波小波 matlab,基于谐波小波的电力系统谐波分析
  11. Lync部署之Lync Mobile服务器端的外网设置
  12. 关于简单的打地鼠游戏开发总结
  13. cuda编程思想和opencv_gpu图像处理
  14. EGo1下板_数码管动态显示
  15. 编译安装nginx实现反向代理、负载均衡、缓存功能
  16. CSP-J CSP-S初赛相关知识汇总
  17. Clojure 学习入门(8)—— 连接mongodb
  18. 微波背景辐射的发现(获诺贝尔奖)——彭齐亚斯和威尔逊
  19. Tomcat 中文文档(一)
  20. 小孩学python有意义吗-小孩Python编程培训有用吗

热门文章

  1. idea 编程字体推荐
  2. c语言大作业超市系统设计,超市管理系统(C语言课程设计报告)
  3. TABLEAU教程2
  4. k3梅林单线双拨教程_斐讯 K3 路由器刷入 OpenWrt LEDE 固件教程,支持多拨及去广告...
  5. Redis 实战场景详解
  6. CISCO 5510 ASDM的实战总结
  7. 智慧校园家校综合信息化管理系统平台
  8. [机器学习导论]——第三课——神经网络Ⅰ
  9. snmpwalk , snmpget
  10. 分段Hermite插值推导