ZBLOG

mysql 5.7 实现分组row_number 并给出例子

MySQL 5.7 之前不支持分组的 row_number() 函数,但可以通过子查询和变量实现。具体步骤如下:

  1. 在 SELECT 子句中,使用变量定义一个计数器,初始值为 0。

  2. 使用子查询获取每个分组内的排序结果,并将排序结果赋值给变量。

  3. 根据当前分组内的计数器值(即行号)和已经计算出的排序结果进行比较,如果相等,则输出当前行。

以下是一个示例:

SET @group_id = '';
SET @row_num = 0;

SELECT id, name, age, department, salary
FROM (
    SELECT id, name, age, department, salary,
           @row_num := IF(@group_id = department, @row_num + 1, 1) AS row_num,
           @group_id := department AS group_id
    FROM employees
    ORDER BY department ASC, salary DESC
) t
WHERE t.row_num <= 3;

在这个示例中,我们想要获取每个部门内工资排名前三的员工信息。首先,我们需要定义两个变量 @group_id 和 @row_num,用于记录当前分组的部门和计数器值。

然后,我们使用一个子查询对所有员工按照部门升序和工资降序排序。在排序过程中,我们使用 IF 函数来判断当前员工是否属于同一部门,如果是,则将计数器加 1;如果不是,则将计数器重置为 1 并更新当前分组的部门值。

最后,我们在外层查询中筛选出行号小于等于 3 的员工信息,即每个部门内工资排名前三的员工。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=1889

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?