对列中的多个值进行分组和计数
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 Date
、City
和 Job 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
。
我正在尝试生成一份报告,说明我们每天在每个城市从事多少工作,同时显示我们从哪里获得该工作。
我有一列包含多个郊区(大约 300-350)。这是两个城市的郊区。我想将这些郊区归入相应的城市并显示计数。
我在想:
Site_Suburb LIKE '%Suburb1%' OR LIKE '%Suburb2%' AS `City1`
Site_Suburb LIKE '%Suburb3%' OR LIKE '%Suburb4%' AS `City2
(只是粗略的伪代码,可以帮助您了解...)
总体而言,我需要向 GROUP BY Date
、City
和 Job 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
。