假设我的表是TEST_123,它包含以下记录:
id | cid | result
------------------
1 | C-1 | TAM
2 | C-1 | TAM
3 | C-2 | RAM
4 | C-2 | TAM
5 | C-3 | SAM
6 | C-3 | SAM现在我想要这样的cid,它只有一种类型的结果,所以答案应该是C-1和C-3,而不是C-2,因为它有两种不同的结果。是否需要Oracle query来执行此操作?
发布于 2018-10-05 15:17:03
您只需理解GROUP BY和HAVING子句。
答案很简单,就像
select cid
from TEST_123
group by cid
having count(distinct result) = 1注意:group by从CID中选择不同的键;的 filters on条件对组中的所有记录都有效,在本例中为count(distinct result) = 1
发布于 2018-10-05 14:16:22
使用是存在的,这有点棘手,因为每个组的结果应该是相同的
select t1.* from TEST_123 t1 where exists(
select 1 from TEST_123 t2 where t2.cid=t1.cid
and t2.result=t1.result
group by t2.cid,t2.result
having count(*)=
(select count(*) from TEST_123 t3
where t3.cid=t2.cid)
)示例
with TEST_123 as
(
select 1 as id , 'c-1' as cid , 'tam' as result from dual
union all
select 2 as id , 'c-1' as cid , 'tam' as result from dual
union all
select 3 as id , 'c-2' as cid , 'tam' as result from dual
union all
select 4 as id , 'c-2' as cid , 'ram' as result from dual
)
select distinct t1.cid from TEST_123 t1 where exists(
select 1 from TEST_123 t2 where t2.cid=t1.cid
and t2.result=t1.result
group by t2.cid,t2.result
having count(*)=
(select count(*) from TEST_123 t3
where t3.cid=t2.cid)
)发布于 2018-10-05 15:12:03
基于@zaynul的回答,这里是另一个变体:
with TEST_123 as
(
select 1 as id , 'c-1' as cid , 'tam' as result from dual
union all
select 2 as id , 'c-1' as cid , 'tam' as result from dual
union all
select 3 as id , 'c-2' as cid , 'tam' as result from dual
union all
select 4 as id , 'c-2' as cid , 'ram' as result from dual
)
select * from test_123 where cid in (
select cid from test_123 group by cid having count(distinct result) = 1);https://stackoverflow.com/questions/52659211
复制相似问题