【发布时间】:2014-09-24 03:13:00
【问题描述】:
我有一张这样的表,从中我可以得到PHX、SLC 和 SJC 数据中心中特定元日期的特定 model_id 的总数。
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,从 phx 进行了 300 次调用,从 slc 进行了 500 次调用,从 sjc 数据中心进行了 900 次调用。
client_id model_id phx slc sjc
Test13N 65 300 500 900
问题陈述:-
现在我应该做的是,我还需要显示avg 在 PHX、SLC 和 SJC 数据中心中针对特定 model_id 的所有调用所花费的时间。 median 以及 PHX、SLC 和 SJC 数据中心也是如此。
表示 PHX 数据中心内 300 次调用所用的平均时间和 PHX 数据中心内 300 次调用所用时间的中位数是多少。 SLC 和 SJC 也是如此。
我正在考虑在这里使用加权平均值。由于上表中机器 A 的情况下,PHX 数据中心的 100 次调用平均耗时 38.6382 毫秒,耗时 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 中使用上述公式,以便计算 PHX 中 300 次调用所用的平均时间和 PHX 中 300 次调用所用的中位时间。 SLC 和 SJC 也是如此。我正在使用 mysql 数据库。
【问题讨论】:
-
在这种情况下,中位数的公式是什么,因为我认为传统的中位数不能从子组的中位数中计算出来?
标签: mysql sql statistics median