3

私は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 を取得する必要があります. 「ステータス」列には 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

これで始めます

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 に答える
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 に答える