Select 列具有相等值的行分区
Select partitions of rows where columns have equal value
我对数据进行了分组 (column_2),我只想 select 每组的行(相同的 column_2 值)另一列的所有值 (column_3) 是相等的。
还有更多列没有不同的值(例如 column_1),但我们不关心它们的值。
例如,对于这个 table:
| column_1 | column_2 | column_3 |
----------------------------------
|'irrelevant'| 1 | 5 |
|'irrelevant'| 1 | 5 |
|'irrelevant'| 1 | 5 |
|'irrelevant'| 2 | 3 |
|'irrelevant'| 2 | 5 |
|'irrelevant'| 2 | 5 |
|'irrelevant'| 3 | 7 |
|'irrelevant'| 3 | 7 |
|'irrelevant'| 4 | 8 |
|'irrelevant'| 4 | 9 |
|'irrelevant'| 4 | 2 |
|'irrelevant'| 5 | 6 |
|'irrelevant'| 6 | 2 |
|'irrelevant'| 7 | 1 |
|'irrelevant'| 7 | 1 |
|'irrelevant'| 7 | 1 |
我会得到:
| column_1 | column_2 | column_3 |
----------------------------------
|'irrelevant'| 1 | 5 |
|'irrelevant'| 1 | 5 |
|'irrelevant'| 1 | 5 |
|'irrelevant'| 3 | 7 |
|'irrelevant'| 3 | 7 |
|'irrelevant'| 5 | 6 |
|'irrelevant'| 6 | 2 |
|'irrelevant'| 7 | 1 |
|'irrelevant'| 7 | 1 |
|'irrelevant'| 7 | 1 |
跳过这些行,其中,对于相同的 column_2 值,column_3 在它们之间是不同的。
您可以使用 COUNT(DISTINCT <expr>)
找出每组有多少个不同的值。
例如:
select *
from t
where column_2 in (
select column_2
from t
group by column_2
having count(distinct column_3) = 1
)
我对数据进行了分组 (column_2),我只想 select 每组的行(相同的 column_2 值)另一列的所有值 (column_3) 是相等的。 还有更多列没有不同的值(例如 column_1),但我们不关心它们的值。
例如,对于这个 table:
| column_1 | column_2 | column_3 |
----------------------------------
|'irrelevant'| 1 | 5 |
|'irrelevant'| 1 | 5 |
|'irrelevant'| 1 | 5 |
|'irrelevant'| 2 | 3 |
|'irrelevant'| 2 | 5 |
|'irrelevant'| 2 | 5 |
|'irrelevant'| 3 | 7 |
|'irrelevant'| 3 | 7 |
|'irrelevant'| 4 | 8 |
|'irrelevant'| 4 | 9 |
|'irrelevant'| 4 | 2 |
|'irrelevant'| 5 | 6 |
|'irrelevant'| 6 | 2 |
|'irrelevant'| 7 | 1 |
|'irrelevant'| 7 | 1 |
|'irrelevant'| 7 | 1 |
我会得到:
| column_1 | column_2 | column_3 |
----------------------------------
|'irrelevant'| 1 | 5 |
|'irrelevant'| 1 | 5 |
|'irrelevant'| 1 | 5 |
|'irrelevant'| 3 | 7 |
|'irrelevant'| 3 | 7 |
|'irrelevant'| 5 | 6 |
|'irrelevant'| 6 | 2 |
|'irrelevant'| 7 | 1 |
|'irrelevant'| 7 | 1 |
|'irrelevant'| 7 | 1 |
跳过这些行,其中,对于相同的 column_2 值,column_3 在它们之间是不同的。
您可以使用 COUNT(DISTINCT <expr>)
找出每组有多少个不同的值。
例如:
select *
from t
where column_2 in (
select column_2
from t
group by column_2
having count(distinct column_3) = 1
)