結合された3つのテーブルから「CaseWhenThenEnd」を使用して結果を返すクエリがあります。次のようになります。
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を正しく与えます。ここで注意すべきことは、各テーブルには特定の「ファイル名」に対して1つのエントリ(行)しかないということです。ここで、「ファイル名」ごとに複数のエントリ(行)を持つことができるテーブルで別の内部結合を追加しようとすると、最後の「合計」だけが正しい値を示し、他の「合計」は間違っているという方法で結果が間違っています値。この2番目のクエリは次のとおりです。
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
すべての列に適切な数値を取得するためのアイデアはありますか?