0

3 つの異なるテーブルから、店舗 (テーブル 2) に複数回訪問した人 (テーブル 1) がおもちゃを購入して楽しんだかどうか (テーブル 3) を知りたいです。表 3 では、0 はマイナス (つまり楽しんでいない) または購入されていないことを示します。1 はポジティブを表します。すべての訪問には独自の識別番号があります。

私の問題は、table1 のすべての ID に対して、table2 に複数のエントリがあり、table3 に複数のエントリがあり、そのうちの 1 つだけが null であることです。

Person      Visit                 Toy 
ID   age    Number Visit  ID      number name   value
1    12     1        1     1      1      Plane  
2    10     2        1     2      1      Train  1
            3        2     1      2      Plane  1
            4        2     2      2      Train  0
                                  3      Plane  0
                                  3      Train  1
           (goes on for every id)  (goes on for every visit)

あるおもちゃをどれだけの人が楽しんだか知りたいです。しかし、いくつかの空の情報があるため、両方の訪問に対して価値があるものしか持っていないという問題があります。たとえば、次のコードは、null 条件が訪問の 1 つにのみ配置されている場合にのみ機能します。

Select p.id, max(toy.value) as value
from person p
join visit v on p.id = v.id
join toy t on v.number = t.number
where
((t.name='plane' and v.visit=1) 
 or (t.name='plane' and v.visit=2)) 
 and (
    (v.visit=1 and ((t.value=1 or t.value=0) is not null))
    ---and (v.visit=2 and ((t.value=1 or t.value=0) is not null))
    )
group by p.id
order by p.id

私はこれを書くために多くの方法を試しました。両方の null 条件を個別に試してみると機能しますが、を削除し--て訪問 1 と 2 の両方で条件を試しても機能しません。正の値が可能であるため、値に max を使用していることに注意してください。

4

2 に答える 2

0

すべての null エントリを排除する方法として count を使用しました。null と値の合計は常に null であるため、制限を追加するcount=2ことで null を排除します。

于 2013-07-03T18:49:53.133 に答える
0

何人の人が特定のおもちゃを楽しんだかを知りたければ、単純に次のように書くことができます:

select count(*) from toy t where t.name='TOY NAME' and t.level=1;

あなたが何か他のものをしたい場合。次に、親切に説明してください。

編集されたクエリ、

Select p.id, max(toy.value) as value
from person p
join visit v on p.id = v.id
join toy t on v.number = t.number
where 
t.name='plane' 
and t.value is not null 
group by p.id 
order by p.id
于 2013-07-02T16:10:01.557 に答える