2015-11-04 3 views
-1

Я пытаюсь создать отчет о том, сколько работ мы делаем в каждом городе каждый день, а также показываем, откуда мы получаем эту работу.Группировка и подсчет нескольких значений в столбце

У меня есть колонна с рядом пригородов (примерно 300-350). Это пригороды в двух городах. Я хотел бы сгруппировать эти пригороды в их соответствующий город, а также показать счет.

Я думал что-то вроде:

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

(Just шероховатой псевдокода, чтобы помочь дать Вам идею ..)

В целом мне нужен отчет 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 

Заранее спасибо^_^

+0

опубликуйте некоторые примеры данных, которые помогут нам понять, что именно вы на самом деле пытаетесь сделать. – lookslikeanevo

ответ

0
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`)) 
+0

Привет, похоже, спасибо за ваш ответ. Я использую: 'ВЫБОР СЛУЧАЙ КОГДА site_suburb LIKE '% Курпару%' ИЛИ ​​site_suburb LIKE '% Mansfield%' THEN 'Brisbane' КОГДА site_suburb LIKE '% Helensvale%', затем 'Gold Coast' END ОТ оговорки; ' Это, кажется, отлично работает, однако есть ли более простой способ добавить кучу переменных (у меня есть 300-350). Вместо того, чтобы вводить «OR LIKE» %% снова и снова? Есть ли какой-то простой синтаксис (suburb1 | suburb2 | suburb3)? – Azyrus

+0

@ Азирус проще всего создать таблицу поиска и присоединиться к ней – lookslikeanevo

0

Возможно, что вы хотите 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 ищет точное совпадение с без каких-либо групповых символов.

Действительно, лучший способ справиться с этим - это таблица поиска, которая имеет site_suburb в одной колонке и city в другой.

Смежные вопросы