如何通过SQL或Excel对含相同字符串的记录按首参考值0.001步长递增编号
结论
该需求更推荐用SQL实现,若仅为临时处理小批量静态数据,Excel公式也可完成,两者的适用场景和实现逻辑如下:
SQL实现优势(优先选择)
- 原生支持模糊匹配逻辑:不管是用
LIKE、CONTAINS还是正则函数,都可以灵活调整Name字段的匹配规则,适配后续可能的规则迭代。 - 窗口函数天然适配需求逻辑:仅需3步即可完成计算,逻辑清晰可复用,数据量十万级也能稳定高效运行:
- 按匹配规则给所有记录打分组标签
- 提取每组第一条记录的当前参考值的整数部分作为组基准值
- 用
ROW_NUMBER()统计组内记录序号,基准值 + (序号-1)*0.001 即为预期参考值
示例SQL(以MySQL为例,可根据实际使用的数据库调整语法):
WITH group_tag AS ( SELECT *, -- 匹配规则可按需调整,示例为按核心名称前缀分组 CASE WHEN Name LIKE 'First Name%' THEN 'group_1' WHEN Name LIKE 'Second Name%' THEN 'group_2' END AS tag FROM business_data ), group_base AS ( SELECT tag, FLOOR(MIN(`Current Reference`)) AS base_num -- 取分组最小参考值的整数部分作为基准 FROM group_tag GROUP BY tag ) SELECT t1.Name, t1.`Current Reference`, t2.base_num + (ROW_NUMBER() OVER(PARTITION BY t1.tag ORDER BY t1.`Current Reference`)-1)*0.001 AS `DESIRED Reference` FROM group_tag t1 JOIN group_base t2 ON t1.tag = t2.tag;
Excel实现适用场景
仅适合临时处理1万条以内的静态固定数据:
- 实现步骤:
- 新增辅助列打分组标签:公式为
=IF(COUNTIF(A2,"First Name*")>0,"group1",IF(COUNTIF(A2,"Second Name*")>0,"group2","")) - 新增辅助列提取每个分组的基准值,再用
COUNTIF统计当前行上方同分组的行数,计算最终预期值
- 新增辅助列打分组标签:公式为
- 缺点:规则调整需要批量修改所有单元格公式,数据量大易出现计算卡顿、拖动行号导致的公式错误,可复用性极低。
内容的提问来源于stack exchange,提问作者Ryan Jackson
相关产品推荐
相关产品推荐

