使用 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 查找连续重复的数量的主要内容,如果未能解决你的问题,请参考以下文章

for循环遍历查找数据与sqlite数据库查找数据性能问题

sqlite数据库写入数据慢,有啥办法吗

SQL&SQLite

在空表中查找 SQLite 列名

Python Sqlite3 executemany 中的绑定数量不正确

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 74 个