分组乘以我的行数

时间:2016-08-05 15:40:56

标签: mysql group-by rows

我有一张桌子,上面有患者的转诊(或旅行,不知道这个词是什么)。转移可以在救护车上,也可以在车内,取决于movil栏。 我必须总计按日和movil类型分组的转移数。 假设这是我的表:

day movil
1   M75
1   M76
1   M3
2   M6
2   M80
3   M8
3   M4
3   M83
3   M4

movil M71,M72,M75,M76,M77,M81,M82,M83是救护车,其余是汽车。 所以我想在汽车和救护车之间分开它们。

这是我的疑问:

select 
    case when movil in ('M71','M72','M75','M76','M77','M81','M82','M83') then 'AMBULANCE' 
    else 'CAR' END as tipo,
    DAY(fecha) as day,
    COUNT(*) as total
from traslados
where YEAR(fecha) = '2016' and MONTH(fecha) = '07'
group by DAY(fecha),tipo
order by DAY(fecha)

所以我每天应该有2排,一排对应救护车,另一排对应车。但是,我每天要获得4行。 我不明白为什么会这样。

2 个答案:

答案 0 :(得分:0)

尝试使用

SELECT CASE
       WHEN movil IN ('M71',
                      'M72',
                      'M75',
                      'M76',
                      'M77',
                      'M81',
                      'M82',
                      'M83') THEN 'AMBULANCE'
       ELSE 'CAR'
   END AS tipo,
   DAY(fecha) AS DAY,
   COUNT(*) AS total FROM traslados WHERE YEAR(fecha) = '2016'  AND MONTH(fecha) = '07' GROUP BY DAY(fecha),
     CASE
         WHEN movil IN ('M71',
                        'M72',
                        'M75',
                        'M76',
                        'M77',
                        'M81',
                        'M82',
                        'M83') THEN 'AMBULANCE'
         ELSE 'CAR'
     END
 ORDER BY DAY(fecha)

答案 1 :(得分:0)

在这种情况下,我只是将查询包装在另一个分组的查询中,这样可以节省重复的大量表达式,更易于阅读且便于携带:

select * from (
  select 
    case when movil in ('M71','M72','M75','M76','M77','M81','M82','M83') then 'AMBULANCE' 
      else 'CAR'end as tipo,
    DAY(fecha) as day
  from traslados
  where EXTRACT(YEAR_MONTH from fecha) = '201607') x 
group by day, tipo
order by day

另请注意,使用EXTRACT在一个表达式中指定年份和月份。