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

如何按特定列值添加自定义索引?附演员表需求示例

这问题我熟!要给每个演员分配专属的唯一编号,同时保证同一个演员不管对应多少部电影,编号都完全一致,用SQL的窗口函数+分组关联就能轻松搞定,我给你两种适配不同需求的解法:

按演员姓名排序分配编号

如果希望编号按照演员姓名的字母顺序生成,可以用下面的SQL:

SELECT 
    original.id,
    original.actor_name,
    actor_numbers.actor_number
FROM 
    your_table original
INNER JOIN (
    -- 先给每个唯一演员分配编号
    SELECT 
        actor_name,
        ROW_NUMBER() OVER (ORDER BY actor_name) AS actor_number
    FROM 
        your_table
    GROUP BY 
        actor_name
) actor_numbers ON original.actor_name = actor_numbers.actor_name;

按演员首次出现顺序分配编号

如果想按照演员在表中第一次出现的顺序(也就是对应最小电影ID的顺序)生成编号,就用这个版本,刚好匹配你给出的示例结果:

SELECT 
    original.id,
    original.actor_name,
    actor_numbers.actor_number
FROM 
    your_table original
INNER JOIN (
    SELECT 
        actor_name,
        ROW_NUMBER() OVER (ORDER BY MIN(id)) AS actor_number
    FROM 
        your_table
    GROUP BY 
        actor_name
) actor_numbers ON original.actor_name = actor_numbers.actor_name;

简单说下逻辑:

  • 子查询actor_numbers先通过GROUP BY actor_name筛选出所有唯一的演员,再用ROW_NUMBER()窗口函数给每个演员生成专属编号。
  • 最后把这个子查询的结果和原表通过actor_name关联,就能把编号对应到每一行数据上了。

用你给的测试数据跑第二个SQL,得到的结果就是你想要的:

idactor_nameactor_number
5Al pacino1
6Tim Roth2
7Antonio Banderas3
8Al pacino1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:44:47