SQL累计和

在SQL中,累积和指的是一种方法,它允许我们计算数据库表中数字列的运行总数。累积和在各种各样的场景中发挥作用,例如跟踪进度或计算给定值的滚动平均值。

在本教程中,我们将学习如何使用各种方法和技术在SQL中实现和利用累加和。

样本数据

为了更好地理解如何实现和使用累加和,让我们首先设置一个带有示例数据的基本表。这使我们能够在本文中快速有效地演示所有方法的工作原理。

首先创建一个存储产品信息的基本表。

创建表

product_id INT主键,

product_name VARCHAR (255),

price DECIMAL(10,2)

);

 

这将创建一个名为“products”的新表,其中存储每个产品的产品id、产品名称和价格。

然后,我们可以继续添加一个示例数据,如下面的示例insert语句所示:

INSERT INTO products (product_id, product_name, price)



(1,“Visual Studio Code”,10.00),

(2,“崇高的文本”,80.00),

(3,《PyCharm Professional》,199.00),

(4,“Eclipse IDE”,30.00),

(5,“IntelliJ IDEA Ultimate”,699.00),

(6, 'GitHub Desktop', 20.00),

(7,“Jira软件”,10.00),

(8, 'Xcode', 660.00),

(9, 'NetBeans', 0.00),

(10, 'Atom', 60.00);

 

注:给出的数据完全是虚构的。它不代表任何列出的项目的实际定价。

结果表如下:

SQL累积和(自连接)

我们可以用来对给定列执行累积求和的技术之一是使用自连接方法。这种方法的一个优点是,它几乎适用于所有SQL数据库,甚至那些不支持Window函数的数据库。

以前面的“products”表为例。我们可以创建price列的累积和,如下面的查询所示:

选择

p1.product_id,

p1.product_name,

p1.price,

SUM(p2.price) AS culative_sum



产品p1

加入

产品p2



p1。Product_id >= p2.product_id

集团

p1.product_id,

p1.product_name,

p1.price

命令

p1.product_id;

 

您注意到查询的工作方式了吗?如果没有,请跟着我们一步一步地解释。

在给定的示例查询中,我们首先为“products”表创建两个别名——“p1”和“p2”,这使我们能够执行自连接。

然后,在“p1”的“product_id”大于或等于“p2”的“product_id”的条件下,我们继续连接“p1”和“p2”。

在下一步中,我们调用sum()函数,该函数基本上计算每行价格的累积和。

最后,我们使用“product_id”、“product_name”和“price”对结果进行分组,并对结果进行排序。

在此操作之后,我们应该得到每个记录的累积和,如下所示的结果表所示:

正如您所看到的,我们得到了前面所有行的总和。最后一行应该包含前面所有行的总和。

SQL累积和(窗口函数)

在SQL中计算累积和的一种更有效和实用的方法是,只要支持窗口函数,就利用它。

如果您有SQL Server、PostgreSQL或MySQL 8.0及以上版本的数据库,那么这是确定给定列的累积和的最有用和推荐的方法。

请看下面的例子:

选择

product_id,

product_name,

价格,

SUM(price) OVER (ORDER BY product_id) AS culative_sum



产品;

 

在本例中,我们首先从“products”表中选择“product_id”、“product_name”和“price”列。

然后,我们使用SUM()函数作为使用OVER子句的窗口函数。

在OVER子句中,我们指定ORDER BY子句,该子句定义计算累积和的顺序。

这应该会返回如下所示的类似输出:

您将注意到,与使用自连接相比,使用窗口函数更加连贯、高效和可读。

结论

在本教程中,我们学习了SQL中的累积和。我们还介绍了如何使用自连接和窗口函数在SQL中执行累积求和。