2014-08-01 1 views
2

У меня есть таблица, подобная этой, из которой я получаю общее количество call_count для конкретного model_id в PHX, SLC и SJC центр данных для определенного meta_date.Как получить среднее время, связанное с группировкой определенного столбца с помощью sql?

machine_name hour_of_day  sec_of_hour  meta_date    client_id  model_id call_count  avg   median  datacenter 

machineA   13    168   2014-07-30 00:00:00  Test13N   65   100   38.6382  5   PHX 
machineA   13    170   2014-07-30 00:00:00  Test13N   65   200   34.382  4   PHX 
machineB   13    168   2014-07-30 00:00:00  Test13N   65   200   33.62   3   SLC 
machineB   13    170   2014-07-30 00:00:00  Test13N   65   300   32.60   2   SLC 
machineC   13    168   2014-07-30 00:00:00  Test13N   65   400   31.20   6   SJC 
machineC   13    170   2014-07-30 00:00:00  Test13N   65   500   39.82   8   SJC 

Так с ниже запроса -

SELECT client_id, model_id, 
    sum(case when datacenter = 'PHX' then call_count END) phx, 
    sum(case when datacenter = 'SLC' then call_count END) slc, 
    sum(case when datacenter = 'SJC' then call_count END) sjc 
FROM models b 
where meta_date= CURDATE()-1 
group by client_id, model_id 
order by client_id, model_id; 

я получаю результат, что означает для model_id 65, 300 звонков были сделаны из PHX, 500 звонков были сделаны из SLC и 900 звонков были сделаны из SJC Дата центр.

client_id model_id phx  slc  sjc 

Test13N  65  300  500  900 

Постановка задачи: -

Теперь то, что я должен сделать это, я также должен показать avg время, потраченное в PHX, SLC и SJC центров обработки данных для всех вызовов для конкретного model_id , Аналогично для median, а также для центров обработки данных PHX, SLC и SJC.

Значение времени avg, набранного 300 звонками в центре обработки данных PHX, и медианное время, затрачиваемое на 300 вызовов в центре обработки данных PHX. Аналогично для SLC и SJC.

И я думаю использовать средневзвешенное значение здесь. Так как с приведенной выше таблицей для machineA 100 звонков в среднем составляли 38,6382 мс в центре обработки данных PHX за 168 секунд часа, а 200 звонков в среднем составляли 34,382 мс в среднем за 170 секунд.

Так что я имею в виду расчета СРЕДНЕМ, как это для PHX центров обработки данных с использованием средневзвешенного здесь-

(100 * 38.6382 + 200* 34.382)/(100 + 200) 

так что в конце концов я должен показать результат, как это -

client_id model_id phx  slc  sjc  phx_avg  phx_median  slc_avg  slc_median  sjc_avg  sjc_median 

Test13N  65  300  500  900 

Как Я размещаю приведенную выше формулу в своем текущем sql, чтобы вычислить время avg, принятое 300 вызовами в PHX, и медианное время, затраченное на 300 звонков в PHX. Аналогично для SLC и SJC. Я работаю с базой данных mysql.

+0

Какова будет формула для медианы в этом случае, потому что я не думаю, что условная медиана может быть вычислена из медианов подгрупп? – Fabricator

ответ

1

Ваша идея использовать средневзвешенное значение для вычисления среднего времени идеально.

Этот запрос (http://sqlfiddle.com/#!2/031211/5/0) выполняет эту работу в полном порядке.

SELECT ... 
    sum(case when datacenter = 'PHX' then call_count END) phx, 
    sum(case when datacenter = 'PHX' then call_count * avg END)/ 
    sum(case when datacenter = 'PHX' then call_count END) phx_avg, 

У вас недостаточно информации для расчета медианной; что требует наличия подробных записей, которые попадали в медианны, показанные в вашей таблице. Вы могли бы как-то подделать вычисления. Но если ваши инженеры по трафику будут основывать свою работу на поддельных медианных вычислениях, ваша компания будет сожалеть. Не делай этого!

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

  • Нет связанных вопросов^_^