sql 窗口函数教程
时间: 2023-07-19 10:32:18 浏览: 123
SQL 窗口函数是一类特殊的函数,它们可以对查询结果集中的一部分数据进行聚合计算,并将计算结果返回给每一行数据,从而可以方便地进行排名、分组、累计计算等操作。
以下是 SQL 窗口函数的基本语法:
```
<窗口函数> OVER ([PARTITION BY <partition 列>]
[ORDER BY <order 列> [ASC/DESC]]
[ROWS <frame 定义>])
```
其中,窗口函数通常是一种聚合函数,如 SUM、AVG、COUNT、MAX、MIN 等,OVER 子句用于指定聚合计算的范围,包括以下三个部分:
1. PARTITION BY:表示对查询结果集进行分区,将相同的值分为一组;
2. ORDER BY:表示对分区后的数据进行排序,以便在计算窗口函数时按照指定的顺序进行计算;
3. ROWS:表示指定窗口函数计算的范围,可以是当前行的前/后若干行,或者是当前分区的所有行。
下面以一个例子来说明 SQL 窗口函数的使用方法,假设有如下的数据表 `orders`:
```
+---------+------+-------+
| orderid | name | price |
+---------+------+-------+
| 1 | A | 10 |
| 2 | A | 20 |
| 3 | B | 30 |
| 4 | B | 40 |
| 5 | B | 50 |
+---------+------+-------+
```
现在要查询每个人的订单数量、订单总价以及订单平均价,并按照订单数量降序排列,可以使用如下的 SQL 语句:
```
SELECT name,
COUNT(*) OVER (PARTITION BY name) AS order_count,
SUM(price) OVER (PARTITION BY name) AS order_total,
AVG(price) OVER (PARTITION BY name) AS order_avg
FROM orders
ORDER BY order_count DESC;
```
以上语句中,使用了 COUNT、SUM 和 AVG 窗口函数,对每个人的订单进行了计数、求和和平均值计算。PARTITION BY 子句指定了按照 name 列进行分区,然后按照 order_count 列进行降序排列。执行以上 SQL 语句得到的结果如下:
```
+------+-------------+-------------+-------------+
| name | order_count | order_total | order_avg |
+------+-------------+-------------+-------------+
| B | 3 | 120 | 40.00000000 |
| A | 2 | 30 | 15.00000000 |
+------+-------------+-------------+-------------+
```
从结果中可以看出,按照订单数量降序排列,B 的订单数量最多,因此排在前面。
阅读全文