我有一个包含2列的表,以下是我的表结构
referral_id |状态
531 | 0
531 | 0
531 | 3
530 | 3
529 | 3
528 | 3
527 | 3
527 | 0
527 | 0
523 | 2
523 | 0
523 | 3
522 | 3
522 | 3
522 | 3
522 | 3
511 | 3
我的预期输出是
referral_id |状态
530 | 3
529 | 3
528 | 3
522 | 3
511 | 3
第1列referral_id可以有多个具有相同id的元组(请参阅referral_id的531和527)。如果所有相应的“状态”都不是3,我需要确保具有相同referral_id的元组被消除。如果所有相应的“状态”都是3,那么我需要应用GROUP BY来获得结果中的referral_id(s) 。 “status”列的值可以是1到4,但我只需要查找3.那么我该如何实现这个结果呢?
答案 0 :(得分:6)
怎么样......
select referral_id, max(status)
from tablename
group by referral_id
having max(status) = 3 and max(status) = min(status)
答案 1 :(得分:4)
您不需要group by
,只需这样做:
select distinct t.referral_id
from tablename t
where t.referral_id not in (
select referral_id
from tablename
where status <> 3
)
order by t.referral_id desc
答案 2 :(得分:0)
您应该使用NOT EXISTS
Select referral_id, status
FROM yourtable a
WHERE NOT EXISTS (
select 1
from yourtable b
where b.referral_id = a.referral_id
and b.status != 3)
答案 3 :(得分:0)
从这个开始
select referral_id from table
group by referral_id
having (min(status)=3 and max(status)=3 and count(status)=3) or (count(status)<3)