使用 sqlite 查找连续重复的数量
Posted
技术标签:
【中文标题】使用 sqlite 查找连续重复的数量【英文标题】:Find the number of duplicates in a row using sqlite 【发布时间】:2016-02-01 10:11:55 【问题描述】:我有一个数据库表,其中包含与每个条目名称相关的 8 个数字的条目。所以我需要编写一个查询来获取与每个联系人姓名相关联的重复号码的联系人姓名总数。 我有一个如下图所示的 sqlite 表
姓名 |数字0 |数字1 |数字2 |数字3 |数字 4 |数字 5 |数字 6 |数字7
假设我有 6000 个条目,并且有 100 个条目具有重复的数字,这些数字可以落在从 TelNum0 到 TelNum8 的任何列中。
例如:如下所示,我有一个数据库,它总共有 5 个条目,有 5 个名称,例如:
名称 Num0 Num1 Num2 Num3 Num4 Num5 Num6 Num7 1)约翰 1234 1234 1234 2)赫巴尔234 3)吉姆 9876 9876 9876 4)金 111 111 111 5)凯特666现在,当我运行查询时,我应该得到 3 个结果,因为 John、Jim 和 Kim 有与他们关联的重复条目。
提前非常感谢
【问题讨论】:
【参考方案1】:首先,正确规范化数据:
SELECT Name, Num0 AS Num FROM MyTable WHERE Num0 IS NOT NULL
UNION ALL
SELECT Name, Num1 FROM MyTable WHERE Num1 IS NOT NULL
UNION ALL
SELECT Name, Num2 FROM MyTable WHERE Num2 IS NOT NULL
UNION ALL
SELECT Name, Num3 FROM MyTable WHERE Num3 IS NOT NULL
UNION ALL
SELECT Name, Num4 FROM MyTable WHERE Num4 IS NOT NULL
UNION ALL
SELECT Name, Num5 FROM MyTable WHERE Num5 IS NOT NULL
UNION ALL
SELECT Name, Num6 FROM MyTable WHERE Num6 IS NOT NULL
UNION ALL
SELECT Name, Num7 FROM MyTable WHERE Num7 IS NOT NULL;
姓名号码
------ ----
约翰 1234
约翰 1234
约翰 1234
赫巴 234
吉姆 9876
吉姆 9876
吉姆 9876
金111
金111
金111
凯特666
然后只计算重复项:
SELECT Name, Num, COUNT(*)
FROM (SELECT Name, Num0 AS Num FROM MyTable WHERE Num0 IS NOT NULL
UNION ALL
SELECT Name, Num1 FROM MyTable WHERE Num1 IS NOT NULL
UNION ALL
SELECT Name, Num2 FROM MyTable WHERE Num2 IS NOT NULL
UNION ALL
SELECT Name, Num3 FROM MyTable WHERE Num3 IS NOT NULL
UNION ALL
SELECT Name, Num4 FROM MyTable WHERE Num4 IS NOT NULL
UNION ALL
SELECT Name, Num5 FROM MyTable WHERE Num5 IS NOT NULL
UNION ALL
SELECT Name, Num6 FROM MyTable WHERE Num6 IS NOT NULL
UNION ALL
SELECT Name, Num7 FROM MyTable WHERE Num7 IS NOT NULL)
GROUP BY Name, Num
HAVING COUNT(*) > 1;
【讨论】:
以上是关于使用 sqlite 查找连续重复的数量的主要内容,如果未能解决你的问题,请参考以下文章