SQL DENSE_RANK()函数

窗口函数是SQL的一个重要特性,在SQL数据库的复杂数据计算和操作中起着至关重要的作用。SQL窗口函数中的一个函数是dense_rank()。

DENSE_RANK()函数允许我们根据另一个指定列中的值为结果集中的每一行分配唯一的秩。它与rank()函数非常相似,但在处理重复记录的方式上略有不同。

在本教程中,我们将探讨这个函数的工作原理、提供的语法以及如何在数据库中使用它。

它是如何工作的

让我们先来解释一下这个函数是如何工作的。最好记住这个函数是高级的,我们不能解释底层的实现。

该函数的工作原理是为结果集中的每一行分配一个秩,从秩1开始,每列中的每个惟一值增加1。

指定列中具有相似值(重复)的行被分配相同的秩,具有不同值的下一行被分配下一个可用的秩,没有任何间隙。

正如我们所提到的,该函数不会在存在重复值的地方留下任何空白,这使得它与rank()函数不同。

dense_rank()函数的一个常见用途是执行排序操作。例如,我们可以用它来查找前N条记录,等等。

函数的语法:

下面描述了dense_rank()函数的语法:

Dense_rank () over

[PARTITION BY partition_expression,…]]

ORDER BY sort_expression [ASC | DESC],…

在给定的语法中:

  1. 我们从dense_rank()函数本身开始。
  2. OVER子句表示窗口函数规范的开始。这定义了如何在结果集中应用排名。
  3. PARTITION BY partition_expression是一个可选子句,它允许我们根据一个或多个列将结果集划分为组或分区。在每个分区上分别应用排名,并在新分区上重置排名。
  4. ORDER BY sort_expression指定我们希望对结果分区中的数据进行排序的顺序。

样本数据

为了演示如何使用dense_rank()函数,让我们从一个包含示例数据的表开始。在我们的例子中,我们使用一个示例“orders”表如下:

例1:Dense_Rank()函数用法

我们可以使用dense_rank()函数根据价格对结果订单进行排序。考虑以下示例查询:

选择

order_id,

customer_username,

product_purchased,

Dense_rank () over

命令

价格DESC

) price_rank

订单啊;

在给定的示例中,我们使用dense_rank()函数根据订单价格对数据进行排序。我们省略了PARTITION BY子句,因为我们不想对数据进行分组。

结果输出如下:

例2:PARTITION BY

我们还可以添加PARTITION BY子句,将数据分组到不同的段中,例如基于所购买的产品。

查询示例如下:

选择

order_id,

customer_username,

product_purchased,

Dense_rank () over

按product_bought划分

命令

价格DESC

) price_rank

订单啊;

这应该根据结果分组将数据分组为不同的组,并对每组中的项目应用排名。

结论

在这篇文章中,我们学习了在SQL中使用和使用dense_rank()窗口函数的基础知识,以便根据特定列为值分配秩。