为mysql中的重复条目分配相同的值/ id

时间:2018-01-29 10:31:59

标签: mysql sql

我的表

|   i   |   j  |

| kathy |  25 |

| Kathy |  45  |     

| Jason|  34   |

| James|  67  |

| Kathy|  37  |

| Emily|  56  |

| Jason|  89   |

我希望相同的值/ ID(请参阅col' k')根据emp名称生成(col' i'),无论列是否重复输入。

作为col' i'中的条目。将是动态的,不能在这里使用case语句。 有没有办法在MySQL动态地执行此操作?

预期o / p:

|   i   |   j  | k |

| kathy |  25 |  1 |

| Kathy |  45  |  1 |   

| Jason|  34   |  2 |

| James|  67  |   3 |

| Kathy|  37  |   1 |

| Emily|  56  |   4 |

| Jason|  34   |  2 |

2 个答案:

答案 0 :(得分:0)

一种方法使用变量和子查询:

select t.*, n.rn
from t join
     (select n.name, (@rn := @rn + 1) as rn
      from (select distinct name from t) n cross join
           (select @rn := 0) params
     ) n
     on t.name = n.name;

请注意,结果集的顺序可能(可能会)与原始表不同。要按特定顺序获得结果,您需要order by,并且没有明显的列用于此类排序。

答案 1 :(得分:0)

您可以在下面使用:

set @pk1 ='';
set @rn1 =0;

SELECT  i,
        j,
        rank
FROM
(
  SELECT  i,
          j,
          @rn1 :=  if(@pk1=i, @rn1, @rn1+1) as rank,
          @pk1 := i  
  FROM
  (
    SELECT  i,
            j
    FROM    tbl1
    ORDER BY i
) A
) B;