使用GROUP BY需要Mysql查询帮助吗?

时间:2012-07-05 12:25:59

标签: mysql sql database group-by

我有一个包含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.那么我该如何实现这个结果呢?

4 个答案:

答案 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)