MYSQL中的开窗函数和 OVER的用法是什么
时间: 2025-01-06 16:53:21 浏览: 4
MYSQL中的开窗函数(Window Functions)和OVER子句是一种强大的数据分析工具,它们允许在不减少结果集行数的情况下,对查询结果进行复杂的计算和聚合。以下是开窗函数和OVER子句的一些常见用法:
1. **基本语法**:
```sql
SELECT
column1,
column2,
AGGREGATE_FUNCTION() OVER (PARTITION BY column1 ORDER BY column2) AS alias
FROM
table_name;
```
2. **常见开窗函数**:
- **ROW_NUMBER()**:为结果集中的每一行分配一个唯一的序号。
- **RANK()**:为结果集中的每一行分配一个序号,相同的值会分配相同的序号,但会跳过序号。
- **DENSE_RANK()**:为结果集中的每一行分配一个序号,相同的值会分配相同的序号,但不会跳过序号。
- **SUM()**:计算累积和。
- **AVG()**:计算平均值。
- **COUNT()**:计算行数。
3. **示例**:
假设有一个员工表 `employees`,包含 `department` 和 `salary` 字段,我们希望计算每个部门的员工工资总和和平均工资。
```sql
SELECT
department,
salary,
SUM(salary) OVER (PARTITION BY department) AS total_salary,
AVG(salary) OVER (PARTITION BY department) AS average_salary
FROM
employees;
```
4. **使用ORDER BY**:
假设我们希望计算每个部门的累积工资。
```sql
SELECT
department,
salary,
SUM(salary) OVER (PARTITION BY department ORDER BY salary) AS cumulative_salary
FROM
employees;
```
5. **使用RANK()函数**:
假设我们希望根据工资对每个部门的员工进行排名。
```sql
SELECT
department,
name,
salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS salary_rank
FROM
employees;
```
通过使用开窗函数和OVER子句,可以实现复杂的数据分析和报表生成,而无需使用子查询或临时表。
阅读全文