You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为城市内唯一用户生成随机数字后缀的伪匿名ID?

解决方案:生成带随机短数字后缀的城市匿名用户ID

没问题!你想要的是每个城市内随机分配短数字后缀的匿名ID,既避免了按字母序编号的可推导性,又比NEWID()生成的冗长ID更简洁。下面是两种适配不同需求的实现方案:

一、临时随机生成匿名ID(每次查询可能变化)

如果不需要每次查询保持匿名ID一致,可以通过先对每个城市的唯一用户做随机排序,再生成行号的方式实现:

WITH unique_users AS (
    -- 先提取每个城市的唯一用户
    SELECT DISTINCT City, Name
    FROM employees
),
randomized_ranking AS (
    -- 对每个城市的用户按随机值排序,生成随机行号
    SELECT 
        City,
        Name,
        ROW_NUMBER() OVER (PARTITION BY City ORDER BY NEWID()) AS random_suffix
    FROM unique_users
)
SELECT 
    City,
    Name,
    CONCAT(City, '_', random_suffix) AS anon_name
FROM randomized_ranking;

效果说明

执行后会得到类似你期望的结果:

CityNameanon_name
LondonJoeLondon_2
LondonPeterLondon_1
LondonTimLondon_3
ParisAliceParis_1
ParisLisaParis_2
ParisSandraParis_4
ParisTimParis_3

这里的数字后缀是随机分配的,不会和原名称的字母顺序挂钩,完全避免了通过编号推导用户信息的风险,同时保持了ID的简洁性。

二、固定匿名ID映射(每次查询结果一致)

如果需要匿名ID和用户的映射关系固定不变(比如用于长期数据匿名化),可以先创建一个映射表存储生成好的匿名ID,后续查询直接关联这个表即可:

1. 创建并初始化映射表

-- 创建存储映射关系的表
CREATE TABLE user_anon_mapping (
    City varchar(8),
    Name varchar(8),
    anon_name varchar(16),
    PRIMARY KEY (City, Name) -- 确保每个城市+用户的组合唯一
);

-- 一次性生成并插入固定的匿名ID
INSERT INTO user_anon_mapping (City, Name, anon_name)
WITH unique_users AS (
    SELECT DISTINCT City, Name
    FROM employees
),
randomized_ranking AS (
    SELECT 
        City,
        Name,
        ROW_NUMBER() OVER (PARTITION BY City ORDER BY NEWID()) AS random_suffix
    FROM unique_users
)
SELECT City, Name, CONCAT(City, '_', random_suffix)
FROM randomized_ranking;

2. 日常查询关联映射表

SELECT 
    e.City,
    e.Name,
    u.anon_name
FROM employees e
JOIN user_anon_mapping u 
    ON e.City = u.City AND e.Name = u.Name;

这种方案的好处是匿名ID不会随查询变化,适合需要稳定匿名化标识的场景。


内容的提问来源于stack exchange,提问作者thothal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 10:07:35