MySQL:对多个内部联接表使用 Case When Then End

标签 mysql

我有一个查询,它使用“Case When Then End”从连接的三个表中返回结果。它看起来像这样:

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。这里要注意的是,每个表对于特定的“文件名”只有一个条目(行)。 现在,当我尝试使用每个“文件名”可以有多个条目(行)的表添加另一个内部连接时,结果变得错误,只有最后一个“总和”显示正确的值,而其他“总和”给出错误值。第二个查询是:

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

是否知道要为所有列获取正确的数字?

最佳答案

如果 MultiFiledata 表可以包含 files 表中任何相应记录的多条记录,那么您需要在单独的查询中进行聚合并加入回到主查询。

例如(语法可能不完美;专注于概念):

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
         inner join (
             select id, 
                    sum(case when extras like '%hat%' 
                             then 1 else 0 end) as hatExtras
             from   MultiFiledata 
         ) m 
         on f.id = m.id
where    f.filename in (X,Y,Z)
group by f.filename;

关于MySQL:对多个内部联接表使用 Case When Then End,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10284872/

相关文章:

mysql - 将 Oracle 分层查询转换为 MySQL

php - PDO 联盟计数

mysql - 有没有一种简单的方法可以将 MySQL 表转换为 Redis 表?

javascript - Nodejs MySQL - 服务器使用未知插件请求身份验证

java - Apache taglib 在 glassfish 中找不到 mysql 驱动程序

java - 为什么关联表无法使用 hibernate 正确更新?

Mysql跨库外键

javascript - 如何使用输入从数组值中插入多行

java - 如何在 JSF 项目中获取文件资源

php - 唯一ID的最佳方法(PHP + Mysql)