sql 窗口函数执行顺序
时间: 2023-09-10 17:10:25 浏览: 75
SQL 窗口函数的执行顺序是在 SELECT 步骤之后,也就是在 WHERE 和 GROUP BY 之后执行。 这意味着窗口函数的执行结果不能被过滤,因为过滤操作在窗口函数之前执行。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [你所不知道的 SQL 查询执行顺序(转载)](https://blog.csdn.net/u014740628/article/details/128659867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关问题
sql窗口函数执行顺序
窗口函数的执行顺序如下:
1. FROM子句:指定要查询的表。
2. WHERE子句:对表中的记录进行筛选。
3. GROUP BY子句:将记录按照指定的列进行分组。
4. HAVING子句:对分组后的结果进行筛选。
5. SELECT子句:选择要显示的列,并可以使用窗口函数进行计算。
6. WINDOW子句:定义窗口函数的窗口。
7. ORDER BY子句:对结果集进行排序。
8. 窗口函数:在SELECT子句中使用窗口函数进行计算。
9. LIMIT子句:限制返回的记录数。
sql 窗口函数教程
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 的订单数量最多,因此排在前面。