sqlite - 在 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 值,这似乎是我需要做的:
- 获取不存在于 Alpha 中的每个值的值列表(换句话说,在这种情况下,这将只是 D.
- 获取 Alpha 中每个在 D 中没有对应值的值的列表。
最终,我需要填写表格,以便每个 Alpha 值对于 Beta 中的每个 dinstinct 值都有一个匹配的 Beta 值。
(注意:第二张表之后的部分已更改,以提供我认为需要执行的具体步骤的列表。)
解决方案
你可以做:
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");