首页 >数据库 >mysql教程 >如何在MySQL中为分组数据生成行号?

如何在MySQL中为分组数据生成行号?

Linda Hamilton
Linda Hamilton原创
2024-11-11 12:42:03916浏览

How to Generate Row Numbers for Grouped Data in MySQL?

MySQL 中分组数据的行号生成

为按特定列分组的数据分配连续行号是高效数据操作的一项宝贵技术和演示。在这种情况下,您希望根据船员 ID 和类型列生成一组数据的行号。

要实现此目的,请使用以下自定义查询:

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;

让我们逐步分解查询:

  1. 子查询: 自定义查询以 (SELECT @curRow := 0, @curType := '') r 定义的子查询开始。这会初始化两个用户定义的变量 @curRow 和 @curType,分别将它们设置为 0 和空字符串。这些变量跟踪行号和遇到的类型值。
  2. 外部查询: 主查询由 SELECT id、crew_id ... 表示,从 Table1 中检索所需的数据桌子。这里的主要焦点是排名列的计算。
  3. 嵌套 CASE 语句: 排名计算中的 CASE 语句检查当前类型值是否与之前遇到的类型 (@curType) 匹配。如果它们匹配,它将 @curRow 加 1 并将增加的值分配给排名。但是,如果类型不同,则会将 @curRow 重置为 1 并将 @curType 更新为当前类型值。这确保了由crew_id和type定义的每个组内准确的行编号。
  4. ORDER BY子句:最终结果根据crew_id和type按升序排序,这对于正确的行至关重要每个组内的编号分配。

通过遵循此综合查询,您可以高效地为由多个列定义的数据组生成行号,为 MySQL 中的数据操作和呈现任务提供通用解决方案。

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

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