如果我有两列,我如何选择列的所有不同值,其中列永远不是特定值,因为 columnA 是相同的值?
Posted
技术标签:
【中文标题】如果我有两列,我如何选择列的所有不同值,其中列永远不是特定值,因为 columnA 是相同的值?【英文标题】:If I have two columns, how can I select all distinct values of columnA where columnB is never a specific value given that columnA is the same value? 【发布时间】:2021-08-10 07:25:03 【问题描述】:假设我有两列:
A | B |
---|---|
1 | 300 |
1 | 299 |
2 | 300 |
2 | 300 |
3 | 299 |
3 | 299 |
我想寻找 A 的不同值,使得 B 等于 300 时不存在 A 和 B 的组合。 在我的示例中,我想返回 columnA 值 3。
结果
A |
---|
3 |
我如何使用 SQL 完成此操作?
【问题讨论】:
根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。 请添加您的预期结果。 @Rezu 对于这种情况,我的预期结果只是值 3,因为它是 columnA 中唯一不包含 columnB 中对应值 300 的 id。 顺便说一句,不要太担心反对票。我认为您已经正确解释了您的问题。只是您应该自己尝试一些事情并告诉我们您到底卡在哪里。然而,对于这种任务,SQL 初学者通常很难想出任何东西。 【参考方案1】:您要查找的内容称为条件聚合。您想按 A 聚合(即在结果中显示 A 值)并仅对特定的 B 值进行检查。例如:
select a
from mytable
group by a
having count(case when b = 300 then 1 end) = 0;
【讨论】:
【参考方案2】:一个简单的subquery
将给出结果。
使用 NOT IN
关键字排除行
SELECT DISTINCT ColumnA
FROM TABLE
WHERE ColumnA NOT IN(
SELECT ColumnA FROM Table WHERE ColumnB=300)
【讨论】:
【参考方案3】:你也可以使用 NOT EXISTS
SELECT DISTINCT A
FROM tbl t1
WHERE NOT EXISTS(
SELECT 1 FROM Tbl t2 WHERE t2.A=t1.B AND t2.B=300)
【讨论】:
以上是关于如果我有两列,我如何选择列的所有不同值,其中列永远不是特定值,因为 columnA 是相同的值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在excel中将两列对应的数据以其中一列的排序 求教各位高手