0

从 3 张不同的桌子上,我想知道一个人(桌子 1)是否曾多次访问商店(桌子 2),是否购买过玩具并喜欢它们(桌子 3)。在表 3 中,0 代表否定(因此不喜欢)或未购买。1 代表正极。每次访问都有自己的识别号码。

我的问题是,对于 table1 中的每个 ID,我有多个 table2 条目,我有多个 table3 条目,其中只有一个为空。

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 条件放置在访问之一上时才有效

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

我使用 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 回答