对列中的多个值进行分组和计数

Grouping and Counting Multiple Values in a Column

我正在尝试生成一份报告,说明我们每天在每个城市从事多少工作,同时显示我们从哪里获得该工作。

我有一列包含多个郊区(大约 300-350)。这是两个城市的郊区。我想将这些郊区归入相应的城市并显示计数。

我在想:

Site_Suburb LIKE '%Suburb1%' OR LIKE '%Suburb2%' AS `City1` 
Site_Suburb LIKE '%Suburb3%' OR LIKE '%Suburb4%' AS `City2 

(只是粗略的伪代码,可以帮助您了解...)

总体而言,我需要向 GROUP BY DateCityJob Source

报告

到目前为止我有这个查询:

SELECT
from_unixtime(`reservations`.`created`) AS `formatted_date`,
`reservations`.`start_date` AS `start_date`,
`reservations`.`site_suburb` AS `site_suburb`,
`reservations`.`job_source` AS `job_source`,

DATE(FROM_UNIXTIME(`reservations`.`created`)) AS date,

COUNT(`reservations`.`created`) as group_by_count from `reservations`

GROUP BY
DATE(FROM_UNIXTIME(`reservations`.`created`)),
`reservations`.`site_suburb`,
`reservations`.`job_source`

order by from_unixtime(`reservations`.`created`) desc

提前致谢^_^

select
    case
         when Site_Suburb LIKE '%Suburb1%' OR Site_Suburb LIKE '%Suburb2%' AS `City1` 
         when Site_Suburb LIKE '%Suburb3%' OR Site_Suburb LIKE '%Suburb4%' AS `City2 

    else site_suburb end Suburb
    ,job_source
    ,DATE(FROM_UNIXTIME(`reservations`.`created`)) AS date
    ,count(*) as jobs

from 
    reservations

group by
   case
         when Site_Suburb LIKE '%Suburb1%' OR LIKE '%Suburb2%' AS `City1` 
         when Site_Suburb LIKE '%Suburb3%' OR LIKE '%Suburb4%' AS `City2 

    else site_suburb end 
  ,job_source
  ,DATE(FROM_UNIXTIME(`reservations`.`created`))

也许你想要的是in:

select (case when Site_Suburb in ('Suburb1', 'Suburb2') then 'City1'
             when Site_Suburb in ('Suburb3', 'Suburb4') then 'City2'
             else site_suburb
        end) Suburb,
       job_source,
       DATE(FROM_UNIXTIME(`reservations`.`created`)) AS date,
       count(*) as jobs
from reservations
group by suburb, job_source, DATE(FROM_UNIXTIME(`reservations`.`created`));

这显然不适用于所有情况,因为 in 寻找没有通配符的精确匹配。

确实,处理此问题的最佳方法是使用查找 table,在一列中包含 site_suburb,在另一列中包含 city