我有一个名为player_stage的表。 我正在尝试准备数据,以便可以将其放入数据仓库中。
我目前有一个不可靠的解决方法,其中涉及重复视图并从重复中手动选择值。
我需要创建一个查询,为重复项提供相同的代理键(sk)。
有人知道我该怎么做吗?我一直被困在 他的三天。
如果您使用的是MySQL 8+,那么DENSE_RANK
可以在这里工作:
SELECT
PLAYER_ID,PLAYER_NAME,DB_SOURCE,DENSE_RANK() OVER (ORDER BY PLAYER_NAME) SK
FROM yourTable;
以上对DENSE_RANK
的调用将为属于同一玩家名称的所有记录分配相同的SK
值。
如果您使用的是早于8+的MySQL版本,那么我们可以使用用户变量来模拟密集排名,例如
SELECT t1.PLAYER_ID,t1.PLAYER_NAME,t1.DB_SOURCE,t2.rn AS SK
FROM yourTable t1
INNER JOIN
(
SELECT PLAYER_NAME,@rn := @rn + 1 AS rn
FROM (SELECT DISTINCT PLAYER_NAME FROM yourTable) t,(SELECT @rn := 0) r
ORDER BY PLAYER_NAME
) t2
ON t1.PLAYER_NAME = t2.PLAYER_NAME
ORDER BY
t1.PLAYER_ID;