mysql的排名函数怎么用_MySQL排名函数

MySQL排名函数

MySQL使用一种排名功能,该函数使我们能够对数据库中分区的每一行进行排名。排名函数还是MySQL窗口函数的一部分。 MySQL中的排名函数可以与以下子句一起使用:

他们总是使用OVER()

他们基于ORDER BY为每行分配一个等级

他们按顺序为每行分配一个等级。

他们总是为行分配一个等级,每个新分区都以一个等级开始。

注意:请注意,自8.0版起,MySQL提供了对排名和窗口函数的支持。

MySQL支持以下三种类型的排名函数:

密集等级

排名百分比

现在,我们将详细讨论每个排名函数:

MySQL的密集_排名()

它是一项函数,可为分区或结果集中的每一行分配等级,而不会出现任何间隔。行的级别始终按连续顺序分配(从上一行开始增加一个)。有时,您会在值之间得到一个平局,然后density_rank会为其分配相同的等级,其下一个等级将是其下一个连续数字。

以下是density_rank()的语法:

在以上语法中,PARTITION BY子句对结果集按FROM子句进行分区,然后在每个分区上应用density_rank函数。接下来,ORDER BY子句将应用于每个分区以指定行的顺序。

例子1

让我们了解MySQL density_rank()函数的工作方式。因此,首先,创建一个包含以下数据的表:

表:员工

mysql-ranking-functions.png

该语句使用density_rank()函数为每一行分配等级值。

执行以上语句后,我们将获得以下输出:

mysql-ranking-functions2.png

例子2

让我们看另一个将结果集划分为多个分区的示例。以下语句使用density_rank()函数在每一行上分配值,并使用emp_age将结果集划分为分区:

成功执行以上查询后,我们将获得以下输出:

mysql-ranking-functions3.png

MySQL等级()

它是一项函数,可为分区或结果集中带有间隙的每一行分配等级。行的等级始终不按连续顺序分配(即,与前一行相比增加1)。有时,您会在值之间产生联系,然后rank()函数将为其分配相同的排名,而下一个排名值将是其上一个排名加上多个重复数字。

以下是rank()的语法:

在上面的语法中,PARTITION BY子句对结果集按FROM子句进行分区,然后rank()函数应用于每个分区,并在分区边界与其他分区交叉时重新初始化。接下来,ORDER BY子句应用于每个分区,以基于一个或多个列名称对行进行排序。

让我们看一下我们先前创建的表,并通过不同的示例了解MySQL中rank()函数的工作方式。

表:员工

mysql-ranking-functions4.png

例子1

该语句使用rank()函数为每一行分配等级值。

上面的查询将给出以下输出:

mysql-ranking-functions5.png

例子2

让我们看另一个将结果集划分为多个分区的示例。以下语句使用rank()函数在每一行上分配值,并使用emp_age将结果集划分为分区,并根据emp_id对它们进行排序:

执行上面的语句,我们将得到以下输出:

mysql-ranking-functions6.png

MySQL percent_rank()

它是一项函数,用于计算分区或结果集中的行的百分位等级(相对等级)。此函数返回一个介于0到1之间的数字。

以下是percent_rank()的语法:

对于指定的行,此函数使用以下公式计算等级:

这里,

rank:是由rank()函数返回的每一行的排名。

total_rows:表示分区中存在的总行数。

注意:这是确保使用此函数,必须必须使用ORDER BY子句。否则,所有行均被视为重复行,并分配相同的等级,即1。

让我们创建一个包含以下数据的“学生”表,并查看MySQL中percent_rank()函数的工作情况。

表:学生

mysql-ranking-functions7.png

例子1

该语句使用percent_rank()函数来为按标记列的每个行顺序计算等级值。

上面的查询将给出以下输出:

mysql-ranking-functions8.png

若要查看上述公式的工作原理,请考虑以下查询:

它将给出以下输出:

mysql-ranking-functions9.png

0

相关文章:Python MySQL-删除表 Python MySQL-删除表 您可& […]...

MySQL变量 MySQL变量 变量用于在程序执行期间存储数据或信息。这是一种使用适当名称标记数据的方法,有助于读者更清楚地了 […]...

MySQL COPY数据库 MySQL COPY数据库 数据库是用于存储可由用户访问和管理的记录的有组织的集合的应用程序。它将数据保存到表 […]...

如何在MySQL中创建索引 如何在MySQL中创建索引 索引是一种数据结构,它使我们可以在现有表中添加索引。它使您能够改进更快地检索数据库 […]...

MySQL HAVING子句 MySQL HAVING子句 MySQL HAVING子句与GROUP BY子句一起使用。它始终返回条件为TR […]...

MySQL内部连接 MySQL内部连接 MySQL内部联接用于仅从表中返回符合指定条件的结果,并隐藏其他行和列。 MySQL假定它 […]...

MySQL复合键 MySQL复合键 MySQL中的组合键是表中两列或多于两列的组合,使我们能够唯一地标识表的每一行。它是一种候选 […]...

MySQL将表导出为CSV MySQL导出表到CSV MySQL具有将表导出到CSV文件的功能。 CSV文件格式是逗号分隔的值,我们可以使 […]...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值