一种对可能具有INT或varchar的列进行计数和分组的好方法是什么?
我正在尝试在一个表(不是我的表)中查找重复项,在该表中有人“明智地”添加了带或不带前导零的部门编号。
bank_cnt_fk字段中的示例数据可能包含:
bank_cnt_fk
03000001080
3000001080
这些基本上都相同,但是有不同的系统将两种不同类型的数据馈入该数据库。我需要找到重复项,以便清理这些混乱。
以下查询似乎不起作用,因为没有结果大于1。
SELECT id, bank_cnt_fk, count(cast(bank_cnt_fk as unsigned))
FROM org_desc_data group by bank_cnt_fk
感谢您的帮助。
答案 0 :(得分:2)
使用以下内容:
SELECT id,
CAST(bank_cnt_fk AS UNSIGNED),
COUNT(*)
FROM org_desc_data
GROUP BY CAST(bank_cnt_fk AS UNSIGNED)
答案 1 :(得分:1)
@Madhur的评论可能是对您问题的最佳答案。还有另一种选择,即剥离所有前导零:
SELECT
TRIM(LEADING '0' FROM bank_cnt_fk) bank_cnt_fk,
COUNT(*) AS cnt
FROM org_desc_data
GROUP BY
TRIM(LEADING '0' FROM bank_cnt_fk);