oracle窗口函数分组查询统计

在Oracle数据库中,使用窗口函数(也称为分析函数)可以在每个分组内部对数据进行统计,而无需改变原始数据集的行数。窗口函数允许你在查询的每一行上执行计算,这些计算可以基于当前行的值、其他行的值或整个分组的聚合值。

以下是一些使用窗口函数进行分组查询统计的常见示例:

  1. 计算每个分组的累计总和

假设你有一个销售表(sales),并且你想要知道每个产品的累计销售额。

 

sql复制代码

SELECT
product_id,
sale_date,
sale_amount,
SUM(sale_amount) OVER (PARTITION BY product_id ORDER BY sale_date) AS cumulative_sales
FROM
sales;
  1. 计算每个分组的排名

使用RANK()DENSE_RANK()函数,你可以为每个分组内的行分配一个排名。

 

sql复制代码

SELECT
product_id,
sale_date,
sale_amount,
RANK() OVER (PARTITION BY product_id ORDER BY sale_amount DESC) AS sales_rank
FROM
sales;
  1. 计算每个分组的百分比

如果你想要知道每个销售额占其产品总销售额的百分比,你可以使用SUM()窗口函数来计算总销售额,并在外部查询中计算百分比。

 

sql复制代码

SELECT
product_id,
sale_date,
sale_amount,
sale_amount / SUM(sale_amount) OVER (PARTITION BY product_id) * 100 AS sales_percentage
FROM
sales;

注意:在上面的百分比计算中,如果SUM(sale_amount)为0,则会导致除以零的错误。你可能需要添加一个CASE语句来处理这种情况。
4. 计算每个分组的行号

使用ROW_NUMBER()函数,你可以为每个分组内的行分配一个唯一的行号。

 

sql复制代码

SELECT
product_id,
sale_date,
sale_amount,
ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY sale_date) AS sale_row_number
FROM
sales;
  1. 计算每个分组的数量

虽然这不是直接使用窗口函数来得到每个分组的数量(因为这通常是通过GROUP BYCOUNT()得到的),但你可以使用COUNT()窗口函数在结果集中的每一行都显示这个数量。

 

sql复制代码

SELECT
product_id,
sale_date,
sale_amount,
COUNT(*) OVER (PARTITION BY product_id) AS sales_count_per_product
FROM
sales;

这些只是窗口函数的一些基本用法。Oracle提供了许多其他窗口函数和选项,允许你执行复杂的分析和计算。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值