我的表
| 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 |
答案 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;