首页 > 解决方案 > MySQL中的分组索引

问题描述

我正在 MySQL 中构建一个表,需要构建一个递增的“分组索引”行,但会为另一列中的新值重置。像这样:

1 Apple
2 Apple
3 Apple
1 Banana
2 Banana
1 Pear
2 Pear
3 Pear
4 Pear

任何想法我怎么能做到这一点?

标签: mysqlsqldatabaseindexingwindow-functions

解决方案


如果你使用 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


推荐阅读