问题:
生成一个 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;
在此查询中:
外部的 CASE 语句SELECT 查询将类型列与 @curType 进行比较,以确定当前行是否属于同一组。
以上是如何在 MySQL 中生成组内的行号?的详细内容。更多信息请关注PHP中文网其他相关文章!