ジョイントしている3つのテーブルから「ケース終了時」を使用して結果を返すクエリがあります。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を返します。ここで注意すべきことは、各テーブルには特定の "ファイル名"のエントリ(行)が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
任意のアイデアは、すべての列の右の数字を取得するには?
おかげで、それは一対多数で使用した場合「明確な」は間違った値を生成することを除いて正常に動作します。 'distinct'を削除すると問題が解決しました。 – sunsa428
別の質問:この場合、各列の合計はどのようにして得られますか?私がロールアップで**を使用すると、 'group by clause'(水平合計)によって生成されたグループの合計が得られますが、各カラムの垂直合計が必要です。 – sunsa428