从3个不同的表中,我想知道在商店(table2)中多次访问的人(table1)是否购买了玩具并且喜欢它们(表3)。在表3中,0表示否定(因此不喜欢)或未购买。 1代表积极的。每次访问都有自己的识别号码。
我的问题是,对于table1中的每个ID,我有多个table2条目,我有多个table3条目,只有一个是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)
我想知道有多少人喜欢某种玩具。但是,因为我有一些空信息,所以我有一些麻烦,因为那些我只对他们的两次访问都有价值。例如,以下代码仅在空条件仅放置在其中一个访问
时才有效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,因为我想要一个正值。
答案 0 :(得分: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
答案 1 :(得分:0)
我使用count作为消除所有空条目的方法。 null和value的总和始终为null,因此通过添加限制count=2
,它将消除null