id color
1 Yellow
1 Pink
2 Yellow
2 blue
3 Yellow
3 Yellow
4 Red
只需要那些所有行颜色都相同的 ID。
尝试了多种方法,但没有得到任何答案。
;WITH CTE AS (
select ROW_NUMBER() OVER(PARTITION BY A.ID,A.COLOR ORDER BY A.ID,A.COLOR)RNO,A.ID,A.COLOR from COLOR a join COLOR b on a.id = b.id and a.color=b.color
)
SELECT DISTINCT ID, COLOR FROM CTE --WHERE RNO > 1
SELECT *
FROM color a join (
SELECT id, color, count(*) as qty
FROM color
GROUP BY id, color
HAVING COUNT(*) > 1
) b on a.id = b.id and a.color = b.color
select * from (
Select color,id,count(1)cnt from COLOR
group by color,id
having count(1) = 1
union all
Select color,id,count(1)cnt from COLOR
group by color,id
having count(1) > 1
) as t where cnt between 1 and 4
最佳答案
GROUP BY
和 HAVING
即可完成这项工作。 COUNT(DISTINCT color)
将返回每个组中不同的颜色,如果返回 1,则组中的所有行都有一种颜色。
select id from my_table
group by id
having count(distinct color) = 1
关于sql - 只查找所有行颜色都相同的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52165391/