-2

私はこのようなことをしたい:

値1、値2、値3、値4、カウント(1)を選択
マイテーブルから
value1、value2、value3、value4 の場所
    (mytable から value1、value2、value3、value4 を選択
     ここで、record_no = 1 および value5 = 'foobar')
値 1、値 2、値 3、値 4 でグループ化
count(1)>4;

つまり、少なくとも 1 つのレコードに特定のプロパティを持つ 1 から 4 のすべてのグループの値 1 から 4 を見つけたいのですが、4 つ以上のレコードを持つグループだけが必要です。

明確化のための更新

mytable から * を選択します。

あなたに何かを与えるでしょう

value1 value2 value3 value4 record_no value5 さらに多くの列
------ ------ ------ ------ --------- ------ ----------- ------
aaa bbb ccc ddd 1 foobar
aaa bbb ccc ddd 2 abcdef
aaa bbb ccc ddd 3 zzzzzz
aaa bbb ccc ddd 4 バーフー
aaa bbb ccc ddd 5 dsnmatr
a1 b1 c1 d1 1 フーバー
a1 b1 c1 d1 2 フーバー
a2 b2 c2 d2 1 バーフー
a2 b2 c2 d2 2 バーフー

value1、value2、value3、value4 のすべてのグループについて、value5 として 'foobar' を持つレコード 1 があり、グループ サイズが >4 の場合に、value1、value2、value3、value4 の値を検索します。

たとえば、それは返されるべきです

値1 値2 値3 値4
------ ------ ------ ------  
aaa bbb ccc ddd
4

3 に答える 3

0

あなたはこのようにすることができます

select  value1, value2, value3, value4, count(*)
from    mytable
group by value1, value2, value3, value4
having  count(*) > 4 
and     sum(decode(record_no , 1 , 1 , 0)) = 1
and     sum(decode(value5 , 'foobar' , 1 , 0) = 1;

これはデコードのちょっとしたトリックです。それはうまくいくはずです。

教育目的で、サブクエリからの実際のデータが必要ない場合 (これはあなたの場合です)、常に を使用することをお勧めしますEXISTS。あなたの例では、それは

select value1, value2, value3, value4, count(*)
from mytable
where exists 
    (select 1 
     from   mytable b
     where  b.record_no = 1 
     and    b.value5 = 'foobar'
     and    b.value1 = a.value1
     and    b.value2 = a.value2 
     and    b.value3 = a.value3
     and    b.value4 = a.value4
     )
group by value1, value2, value3, value4
having count(1) > 4;
于 2013-04-13T06:50:47.900 に答える