如何在 MySQL 中按组对行进行编号?

Barbara Streisand
发布: 2024-11-11 21:52:03
原创
389 人浏览过

How to Number Rows by Group in MySQL?

在 MySQL 中按组对行进行编号

考虑以下表结构:

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

生成结果集包括crew_id和type的每个组合的行号,执行以下命令查询:

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;
登录后复制

解释:

  • 查询首先初始化两个用户变量@curRow和@curType,以跟踪当前行号和分别是 type 的当前值。
  • 在主查询中,CASE 语句检查 type 的当前值是否与之前的值匹配@curType 中存储的值。如果它们匹配,则将 @curRow 递增 1。否则,它将 @curRow 重置为 1 并使用新值更新 @curType。
  • 表达式 (@curRow := @curRow 1) 1 添加递增的或将@curRow的值重置为1以生成行号。
  • 查询按crew_id排序并键入以正确分组和编号行。

输出:

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

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

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