SQL select row where(这一列在另一列中有许多不同的值)
Posted
技术标签:
【中文标题】SQL select row where(这一列在另一列中有许多不同的值)【英文标题】:SQL select row where (this column has many different values in the other) 【发布时间】:2016-02-18 15:02:27 【问题描述】:我想选择一些精确列具有不同值而另一个精确列具有相同值的行。
示例:
COLUMN_A | COLUMN_B
__________|___________
|
1 | 2002
1 | 2002
2 | 2001
2 | 2007
3 | 2010
3 | 2010
现在,假设我想知道哪些行具有相同的 A 但不同的 B,查询将返回行
2 | 2001
2 | 2007
或者只是
2
只要我知道是哪一个...
【问题讨论】:
GROUP BY、COUNT DISTINCT 等 我会使用自联接或 Exists 查询。group by having distinct count
可能是性能最差的
select users have more than one distinct records in mysql的可能重复
@JamieD77 可能,但是如果 COLUMN_B 中有两个以上不同的值怎么办? Count Distinct
可以很好地处理它,而 Join
需要 Distinct
自己的。具有多个不同值的Join
变成笛卡尔积。
@Y.B.我会亲自使用 EXISTS ......我没有在自我加入上考虑太多:)
【参考方案1】:
Count(Distinct ColumnName) 就是这种情况。它确保只考虑唯一值。
With Src As (
Select *
From (Values
(1, 2002),
(1, 2002),
(2, 2001),
(2, 2007),
(3, 2010),
(3, 2010)
) V (COLUMN_A, COLUMN_B)
)
Select *
From Src
Where COLUMN_A In (
Select COLUMN_A
From Src
Group By COLUMN_A
Having Count(Distinct COLUMN_B) > 1 --<- "More than one unique value" condition
)
COLUMN_A COLUMN_B
2 2001
2 2007
【讨论】:
【参考方案2】:你可以使用:
SELECT COLUMN_A
FROM dbo.YourTable
GROUP BY COLUMN_A
HAVING MIN(COLUMN_B) <> MAX(COLUMN_B);
另一种方法是使用EXISTS
:
SELECT *
FROM dbo.YourTable A
WHERE EXISTS(SELECT 1 FROM dbo.YourTable
WHERE COLUMN_A = A.COLUMN_A
AND COLUMN_B <> A.COLUMN_B);
【讨论】:
【参考方案3】:这个没有分组:
SELECT x.column_a, x.column_b, y.column_b
FROM table_name x
JOIN table_name y
ON ( x.column_a = y.column_a AND x.column_b <> y.column_b )
您只需将表连接到自身,并提供您正在寻找的条件。
【讨论】:
以上是关于SQL select row where(这一列在另一列中有许多不同的值)的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用query函数查询dataframe中某一个数据列在指定数据范围的数据行(rows where value is between two values in dataframe)