首页  >  文章  >  数据库  >  如何在 MySQL 中生成组内的行号?

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

DDD
DDD原创
2024-11-11 17:45:02941浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn