如何用SQL对同一列内的相似数据进行归类查询
SQL实现带前导零同类账号配对方案
核心思路
利用「字符串转数值会自动忽略前导零」的特性,将同数值的账号归为同类,通过自连接筛选出带前导零和不带前导零的配对组合,过滤无配对的唯一值。
通用SQL语句
假设你的表名为account_table,参考写法如下:
SELECT t1.account AS account1, t2.account AS account2 FROM account_table t1 INNER JOIN account_table t2 ON CAST(t1.account AS UNSIGNED) = CAST(t2.account AS UNSIGNED) AND t1.account LIKE '0%' AND t2.account NOT LIKE '0%';
逻辑说明
- 自连接关联同数值的账号:通过
CAST将字符串格式的account转为无符号整数,自动抹除前导零匹配同类值 - 固定配对规则:通过
LIKE条件限定account1为带前导零的账号,account2为不带前导零的账号,避免出现反向重复的配对结果 - 自动过滤唯一值:INNER JOIN会自动排除没有匹配项的唯一值(如示例中的456),无需额外写过滤条件
不同数据库适配调整
如果使用非MySQL数据库,仅需调整数值转换的函数即可:
- PostgreSQL:替换为
CAST(t1.account AS INTEGER) - Oracle:替换为
TO_NUMBER(t1.account) - SQL Server:替换为
CAST(t1.account AS INT)
输出示例
针对你给出的测试数据,执行后输出结果如下:
| account1 | account2 |
|---|---|
| 011 | 11 |
| 023 | 23 |
内容的提问来源于stack exchange,提问作者olan24
相关产品推荐
相关产品推荐

