首页 > 解决方案 > 在 SQLite 中查找重复次数较少的值

问题描述

我有一个包含多列的表,但我关心的两个我们可以称为 Alpha 和 Beta。还有第三个,Gamma,它是 Alpha 和 Beta 之间的比较。我们将简化它并说 Gamma 是 Alpha 和 Beta 之间的区别,所以我有这样的东西:

Alpha  Beta  Gamma
-----  ----  -----
1       A     (some answer)
1       B     (some answer)
1       C     (some answer)
2       A     (some answer)
2       B     (some answer)
2       C     (some answer)
3       A     (some answer)
3       B     (some answer)
3       C     (some answer)
4       A     (some answer)
4       B     (some answer)
4       C     (some answer)

此时Gamma的内容并不重要。

因此,假设我最终在 Beta 中得到了一个新值“D”。我有 1D 和 3D,但没有 2D 和 4D。

我可以在 Sqlite 中通过查询找到哪些 Alpha 值还没有对应的 D 值吗?例如,在此表中:

Alpha  Beta  Gamma
-----  ----  -----
1       A     (some answer)
1       B     (some answer)
1       C     (some answer)
1       D     (some answer)
2       A     (some answer)
2       B     (some answer)
2       C     (some answer)
3       A     (some answer)
3       B     (some answer)
3       C     (some answer)
3       D     (some answer)
4       A     (some answer)
4       B     (some answer)
4       C     (some answer)

由于我需要每个 Alpha 值都有一个相应的 Beta 值,这似乎是我需要做的:

  1. 获取不存在于 Alpha 中的每个值的值列表(换句话说,在这种情况下,这将只是 D.
  2. 获取 Alpha 中每个在 D 中没有对应值的值的列表。

最终,我需要填写表格,以便每个 Alpha 值对于 Beta 中的每个 dinstinct 值都有一个匹配的 Beta 值。

注意:第二张表之后的部分已更改,以提供我认为需要执行的具体步骤的列表。)

标签: sqlite

解决方案


你可以做:

1) 对于问题 (a) 的答案:

Select beta from test 
  GROUP BY beta
  having count(alpha) < (select count(distinct alpha) from test);

2)问题(b):

Select alpha from test 
  GROUP BY alpha
  having count(beta) < (select count(distinct beta) from test);

尝试使用以下输入:

Create table test (alpha int, beta varchar(2));

insert into test values (1, "A");
insert into test values (1, "B");
insert into test values (1, "C");
insert into test values (1, "D");
insert into test values (2, "A");
insert into test values (2, "B");
insert into test values (2, "C");
insert into test values (3, "A");
insert into test values (3, "B");
insert into test values (3, "C");
insert into test values (3, "D");
insert into test values (4, "A");                                           
insert into test values (4, "B");                                           
insert into test values (4, "C");

推荐阅读