3

我有一个有 2 列的表,以下是我的表结构

推荐人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

我的预期输出是

推荐人ID | 地位

530 | 3
529 | 3
528 | 3
522 | 3
511 | 3

第一列referral_id 可以有多个具有相同id 的元组(参见referral_id 的531 和527)。如果所有相应的“状态”都不是 3,我需要确保消除具有相同推荐 ID 的元组。如果所有相应的“状态”都是 3,那么我需要应用 GROUP BY 来获得该推荐 ID(S)结果. “状态”列的值可以从 1 到 4,但我只需要寻找 3。那么我怎样才能达到这个结果呢?

4

4 回答 4

6

关于什么 ...

select referral_id, max(status)
from tablename
group by referral_id
having max(status) = 3 and max(status) = min(status)
于 2012-07-05T12:32:05.517 回答
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
于 2012-07-05T12:30:05.153 回答
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)
于 2012-07-05T12:31:54.293 回答
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)
于 2012-07-05T12:34:42.770 回答