mysql-窗口函数和正常函数区别

mysql-窗口函数和正常函数区别

窗口函数(Window Function)和普通函数在关系型数据库中有着明显的区别,主要体现在它们的计算范围和结果输出上:

计算范围:

普通函数: 普通函数在每一行上独立执行,只考虑当前行的数据。它们的计算范围仅限于单个行的值,不受其他行的影响。
窗口函数: 窗口函数基于整个查询结果集上的子集进行计算。它们能够在结果集的多行上执行聚合操作,而不会将结果简化为单一的行。窗口函数通常涉及在多行上进行聚合、排序或排名等操作,同时保留原始行的数据。
输出结果:

普通函数: 普通函数将独立地为每个行计算结果,输出与输入行数相同的结果集。
窗口函数: 窗口函数的输出结果可能与输入行数不同。它们可以在结果集中添加新的列,而不会简化结果为单行或多行。通过对窗口函数的使用,可以在结果集中创建新的聚合列或进行排名,而无需改变结果集的行数。
举例来说,假设有一个包含销售数据的表格,我们想要计算每个地区的销售总额:

如果使用普通函数,你将需要使用 GROUP BY 子句,并得到每个地区的总销售额,结果会在每个地区的行上独立显示。
如果使用窗口函数,你可以在整个结果集上执行聚合操作,而不会减少结果集的行数,通过添加一个额外的列,每行中都会显示该地区的总销售额,同时保留了原始行的数据。
总的来说,普通函数是对每个行的单独处理,而窗口函数是在结果集的子集上执行计算,可以在多行上进行聚合、排序或排名等操作,并保留原始行的数据。

好的,我将为你提供一个简单的示例,演示如何使用窗口函数和普通函数来计算每个地区的销售总额。

假设我们有一个名为 sales_data 的表格,包含 region(地区)、sales_amount(销售额)和 date(销售日期)等列。

首先,我们来看看如何使用普通函数来计算每个地区的销售总额:

sql
Copy code
SELECT
region,
SUM(sales_amount) AS total_sales
FROM
sales_data
GROUP BY
region;
上述查询将对每个地区进行分组,并计算每个地区的销售总额。

接下来,让我们看看如何使用窗口函数来实现相同的目标:

sql
Copy code
SELECT
region,
sales_amount,
SUM(sales_amount) OVER (PARTITION BY region) AS total_sales_per_region
FROM
sales_data;
在这个查询中,我们使用了窗口函数 SUM(),并在 OVER 子句中指定了 PARTITION BY region,以确保计算的是每个地区的销售总额。结果集中的每一行都会显示该地区的总销售额,并保留了原始的 sales_amount 列。

这两个查询都会给出每个地区的总销售额,但是使用的是不同的方法:普通函数在分组后计算每个地区的总额,而窗口函数在整个结果集上计算每个地区的总额,并在每一行上保留了原始的销售额数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值