如何在 MySQL 中生成组内的行号?

DDD
发布: 2024-11-11 17:45:02
原创
940 人浏览过

How to Generate Row Numbers Within Groups in MySQL?

MySQL 中组内的行号

问题:

生成一个 MySQL 查询为每个组生成行号基于两个字段的记录,例如crew_id 和type。应针对船员 ID 和类型的每个新组合重置行号。

示例数据:

id   crew_id   amount    type
 1      4       1000      AUB
 2      4       1500      AUB
 3      5       8000      CA
 4      4       1000      CA
 5      5       1000      AUB
 6      6       3000      AUB
 7      4       2000      CA
 8      6       3500      AUB
 9      4       5000      AUB
 10     5       9000      CA
 11     5       1000      CA
登录后复制

所需输出:

id    crew_id   amount   type    row_number
 1      4       1000      AUB        1    
 2      4       1500      AUB        2 
 9      4       5000      AUB        3
 4      4       1000      CA         1
 7      4       2000      CA         2
 5      5       1000      AUB        1
 3      5       8000      CA         1
 10     5       9000      CA         2
 11     5       1000      CA         3
 6      6       3000      AUB        1
 6      6       3000      AUB        2
登录后复制

解决方案:

为了获得所需的行数,我们可以结合使用子查询和 CASE 语句:

SELECT    id,
          crew_id,
          amount,
          type,
         ( 
            CASE type 
            WHEN @curType 
            THEN @curRow := @curRow + 1 
            ELSE @curRow := 1 AND @curType := type END
          ) + 1 AS rank
FROM      Table1 p,
          (SELECT @curRow := 0, @curType := '') r
ORDER BY  crew_id,type asc;
登录后复制

在此查询中:

  • 子查询(SELECT @curRow := 0, @curType := '') r 初始化两个用户定义变量:@curRow 为 0,@curType 为空字符串。
  • 外部的 CASE 语句SELECT 查询将类型列与 @curType 进行比较,以确定当前行是否属于同一组。

    • 如果类型等于@curType,@curRow 增加 1。
    • 如果类型与 @curType 不同,@curRow 重置为 1,@curType 更新为当前类型值。
  • 计算值加 1 以产生行号。
  • 结果集按船员 ID 排序并按升序输入。

以上是如何在 MySQL 中生成组内的行号?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板