详细举例介绍sql的OVER(PARTITION BY …)
时间: 2024-09-26 15:10:51 浏览: 40
`OVER(PARTITION BY ...)` 是SQL中窗口函数的一个重要部分,它允许我们在数据集的不同分区上应用函数。举个例子,假设我们有一个销售数据表 `sales`,包含 `product`, `date`, `amount` 列,我们想找出每个产品的每日销售额总和,并提供每个产品每日销售额与前一天的比较,这时就可以使用 `OVER` 子句。
```sql
SELECT product, date, amount,
SUM(amount) OVER (
PARTITION BY product
ORDER BY date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) as cumulative_sales,
LAG(SUM(amount)) OVER (
PARTITION BY product
ORDER BY date
) as previous_day_sales
FROM sales;
```
在这个例子中:
- `PARTITION BY product`: 按照产品分组,确保每天每种产品的数据都在单独的窗口内。
- `ORDER BY date`: 定义了窗口内的排序规则,从最早的日期开始。
- `ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW`: 表示窗口包括当前行及其之前的所有行(即每日累计),每一天都有它的累计销售额。
- `LAG(SUM(amount))`: 计算每个日期的累计销售额与前一个日期的累计销售额相比的变化(即当天与前一天的差额)。
这样,结果将展示每个产品的每日销售额,以及累计销售额和前一天的累计销售额,方便进行趋势分析。
阅读全文