mysql - MySQL中的分组索引
问题描述
我正在 MySQL 中构建一个表,需要构建一个递增的“分组索引”行,但会为另一列中的新值重置。像这样:
1 Apple
2 Apple
3 Apple
1 Banana
2 Banana
1 Pear
2 Pear
3 Pear
4 Pear
任何想法我怎么能做到这一点?
解决方案
如果你使用 mysql 5.x 你可以使用这个查询
CREATE TABLE fruit ( `fruit` VARCHAR(6) ); INSERT INTO fruit ( `fruit`) VALUES ( 'Apple'), ( 'Apple'), ( 'Apple'), ( 'Banana'), ( 'Banana'), ( 'Pear'), ( 'Pear'), ( 'Pear'), ( 'Pear');
✓ ✓
SELECT IF(fruit = @fruit, @row_number := @row_number +1,@row_number := 1) rownumber ,@fruit := fruit FROM (SELECT * From fruit ORDER BY fruit ASC) t, (SELECT @row_number := 0) a,(SELECT @fruit := '') b ;
行号 | @fruit := 水果 --------: | :-------------- 1 | 苹果 2 | 苹果 3 | 苹果 1 | 香蕉 2 | 香蕉 1 | 梨 2 | 梨 3 | 梨 4 | 梨
db<>在这里摆弄
列的顺序必须是这种方式,这样算法才能工作。如果您需要在 mysql 中更改,请使用外部 SELECT
推荐阅读
- docker - Docker for Windows(Linux 容器)无法挂载 Windows 网络驱动器
- bash - For 循环仅遍历那些可用的文件
- java - 如何正确取消 ResultSet 查询
- node.js - 无法在 NodeJS 中将字符串转换为 ObjectId
- laravel - 如何在 Laravel 中使用 React Bootstrap
- python - 如何关闭通过win32在python中打开的Excel实例?
- python - 有没有办法修改字符串以删除小数?
- java - 使用递归创建单行号模式
- list - 在 Scala 中将列表转换为地图
- mysql - SQL:查找列值是否按正确顺序