我有一个查询,它使用'Case When Then End'从三个被联结的表中返回结果。它看起来像这样:MySQL:使用大小写然后结束多个内部联接表
select f.filename,
sum(case when v.rUser like '%bike%' then 1 else 0 end) as bikeUser,
sum(case when v.rUser like '%Pedestrian%' then 1 else 0 end) as pedestrianUser,
sum(case when d.weather like '%clear%' then 1 else 0 end) as clearWeather
from VMdata v
inner join files f on v.id = f.id
inner join DMdata d on f.id = d.id
where f.filename in (X,Y,Z)
group by f.filename
这工作正常,每个结果行给出正确的1或0。这里需要注意的是每个表只有一个条目(行)用于特定的“文件名”。 现在,当我尝试添加另一个Inner Join并且每个“文件名”可能有多个条目(行)的表时,结果会变得错误,只有最后一个“总和”显示正确的值,而其他“总和”给出错误的价值。第二个查询是:
select f.filename,
sum(case when v.rUser like '%bike%' then 1 else 0 end) as bikeUser,
sum(case when v.rUser like '%Pedestrian%' then 1 else 0 end) as pedestrianUser,
sum(case when d.weather like '%clear%' then 1 else 0 end) as clearWeather,
sum(case when m.extras like '%hat%' then 1 else 0 end) as hatExtras
from VMdata v
inner join files f on v.id = f.id
inner join DMdata d on f.id = d.id
inner join MultiFiledata m on f.id = m.id
where f.filename in (X,Y,Z)
group by f.filename
任何想法获得所有列的正确数字?
谢谢,它的工作原理不同之处在于用一个对多数使用时,“独立的”产生错误的值细。删除'独特'解决了这个问题。 – sunsa428 2012-04-24 09:47:46
另一个问题:在这种情况下,如何获得每列的总和?当我使用**卷起来时,它给出了由'group by clause'生成的组的总和(水平和),而我需要每列的垂直和。 – sunsa428 2012-04-26 15:12:21