SQLite按两列分组生成组编号或哈希值替代拼接字符串实现方法
方案1:生成groupN格式的组序号
用SQLite的窗口函数DENSE_RANK即可实现,相同的city+age组合会分配同一个连续序号,完全匹配你给出的期望输出:
SELECT 'group' || DENSE_RANK() OVER (ORDER BY city, age) AS h, name, id FROM mytable;
执行后New-York+25的两条记录会分到group1,Chicago+23的记录分到group2,和你要求的输出格式完全一致。
方案2:生成固定长度的哈希标识
如果需要用哈希值作为分组标识,SQLite 3.31.0及以上版本内置支持md5哈希函数,对拼接后的组合取哈希即可,得到固定32位长度的十六进制字符串,不会出现拼接结果过长的问题:
SELECT hex(md5(city || age)) AS h, name, id FROM mytable;
如果你的SQLite版本不支持内置md5,也可以用sha1()函数替换,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Basj
相关产品推荐
相关产品推荐

