MySQL 排名函数17 Mar 2025 | 4 分钟阅读 MySQL 使用排名函数,该函数允许我们在数据库中对分区中的每一行进行排名。排名函数也是 MySQL 中窗口函数的一个子集。MySQL 中的排名函数可以与以下子句一起使用:
注意:请注意,MySQL 自 8.0 版本以来就支持排名函数和窗口函数。MySQL 支持以下三种类型的排名函数:
现在,我们将详细讨论每种排名函数。 MySQL dense_rank()这是一个函数,它在没有间隙的情况下为分区或结果集中的每一行分配排名。行的排名总是按连续顺序分配(比上一行增加一)。有时你会遇到值相等的情况,这时 dense_rank() 会将它们分配相同的排名,而下一个排名将是其下一个连续的数字。 以下是 dense_rank() 的语法: 在上面的语法中,PARTITION BY 子句对 FROM 子句返回的结果集进行分区,然后 dense_rank 函数应用于每个分区。接下来,ORDER BY 子句应用于每个分区,以指定行的顺序。 示例 1让我们了解 MySQL dense_rank() 函数的工作原理。首先,创建一个包含以下数据的表: 表:employees ![]() 此语句使用 dense_rank() 函数为每一行分配排名值。 执行上述语句后,我们将得到以下输出: ![]() 示例 2让我们看另一个示例,该示例将结果集划分为多个分区。以下语句使用 dense_rank() 函数为每一行分配值,并使用 emp_age 将结果集划分为分区: 成功执行上述查询后,我们将得到以下输出: ![]() MySQL rank()这是一个函数,它在有间隙的情况下为分区或结果集中的每一行分配排名。行的排名总是不按连续顺序分配(即,比上一行增加一)。有时你会遇到值相等的情况,这时 rank() 函数会将其分配相同的排名,而下一个排名值将是其前一个排名加上重复数字的数量。 以下是 rank() 的语法: 在上面的语法中,PARTITION BY 子句对 FROM 子句返回的结果集进行分区,然后 rank() 函数应用于每个分区,并在跨越其他分区的分区边界时重新初始化。接下来,ORDER BY 子句应用于每个分区,以按一个或多个列名对行进行排序。 让我们使用我们之前创建的表,并通过不同的示例查看 MySQL 中 rank() 函数的工作原理。 表:employees ![]() 示例 1此语句使用 rank() 函数为每一行分配排名值。 上述查询将产生以下输出: ![]() 示例 2让我们看另一个示例,该示例将结果集划分为多个分区。以下语句使用 rank() 函数为每一行分配值,并使用 emp_age 将结果集划分为分区,并根据 emp_id 对其进行排序: 执行上述语句,我们将得到以下输出: ![]() MySQL percent_rank()这是一个函数,用于计算分区或结果集中行的百分比排名(相对排名)。此函数返回一个介于 0 和 1 之间的数字。 以下是 percent_rank() 的语法: 对于指定行,此函数使用以下公式计算排名: 此处, rank:这是 rank() 函数返回的每一行的排名。 total_rows:它表示分区中存在的总行数。 注意:在使用此函数时,必须使用 ORDER BY 子句。否则,所有行将被视为重复项,并分配相同的排名,即 1。让我们创建一个名为 "students" 的表,其中包含以下数据,并查看 MySQL 中 percent_rank() 函数的工作原理: 表:students ![]() 示例 1此语句使用 percent_rank() 函数按 marks 列对每一行计算排名值。 上述查询将产生以下输出: ![]() 要查看上述公式的工作原理,请考虑以下查询: 它将提供以下输出 ![]() 下一个主题MySQL 窗口函数 |
我们请求您订阅我们的新闻通讯以获取最新更新。