MySQL中的分组索引
Posted
技术标签:
【中文标题】MySQL中的分组索引【英文标题】:Grouped Index in MySQL 【发布时间】:2020-02-21 23:38:22 【问题描述】:我正在 mysql 中构建一个表,需要构建一个递增的“分组索引”行,但会为另一列中的新值重置。像这样:
1 Apple
2 Apple
3 Apple
1 Banana
2 Banana
1 Pear
2 Pear
3 Pear
4 Pear
有什么想法可以做到这一点吗?
【问题讨论】:
如果有两组“Apple”会发生什么。 【参考方案1】:如果您运行的是 MySQL 8.0,只需使用row_number()
:
select
row_number() over(partition by fruit order by ?) rn,
fruit
from mytable
请注意,为了让您的答案产生一致的结果,您需要另一个可用于排序记录的列。我在查询中将其表示为?
。
【讨论】:
【参考方案2】:如果你使用 mysql 5.x 你可以使用这个查询
✓ ✓CREATE TABLE fruit ( `fruit` VARCHAR(6) ); INSERT INTO fruit ( `fruit`) VALUES ( 'Apple'), ( 'Apple'), ( 'Apple'), ( 'Banana'), ( 'Banana'), ( 'Pear'), ( 'Pear'), ( 'Pear'), ( 'Pear');
行号 | @fruit := 水果 --------: | :-------------- 1 |苹果 2 |苹果 3 |苹果 1 |香蕉 2 |香蕉 1 |梨 2 |梨 3 |梨 4 |梨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 ;
db小提琴here
列的顺序必须这样,算法才能工作。如果需要在 mysql 中更改,请使用外部 SELECT
【讨论】:
以上是关于MySQL中的分组索引的主要内容,如果未能解决你的问题,请参考以下文章