计算MySQL中其他平均值的平均值

时间:2017-03-03 16:05:12

标签: mysql sql

我有这个表格,我希望根据cat_id计算所有用户的平均响应时间,并根据存储在join的国家/地区user_id计算平均响应时间另一张桌子。

根据用户的国家/地区查找平均时间的正确方法是什么?

+---------+--------+-------+-------+-------+-------+-------+-------+-------+
| user_id | cat_id | time1 | time2 | time3 | time4 | time5 | time6 | time7 |
+---------+--------+-------+-------+-------+-------+-------+-------+-------+
|      11 |      1 | 10000 |  3500 | 10000 | 10000 |  7000 |  6000 |  6500 |
|       0 |      1 |  6139 |  2640 |  5438 |  8136 |  7157 |  8723 |  4677 |
|      11 |      3 |  7500 |  5500 | 10000 |  5500 |  7500 |  4000 |  9500 |
|       0 |      3 |  7462 |  8907 |  7513 |  4181 |  7275 |  2074 |  4444 |
|       1 |      1 |  8500 |  2000 |  8500 |  1500 | 10000 |  6500 | 10000 |
|       0 |      1 |  8885 |  7240 |  2153 |  6115 |  6330 |  6151 |  4325 |
|       1 |      1 | 10000 |  3000 | 10000 |  5500 | 10000 |  9000 | 10000 |
|       0 |      1 |  6188 |  3280 |  4725 |  5662 |  3344 |  8792 |  7560 |
|       1 |      4 |  4000 |  4500 | 10000 |  5000 |  3000 |  1500 |  2112 |
|       0 |      4 |  2750 |  4861 |  3413 |  4174 |  3080 |  3213 |  7932 |
+---------+--------+-------+-------+-------+-------+-------+-------+-------+

我尝试过:(AVG(time1 + time 2 + ... + time7) / 7)但是当我反复核对结果不正确时。

提前感谢您的帮助:)

3 个答案:

答案 0 :(得分:0)

首先,你的括号有问题,应该是

AVG((time1 + time2 + ... + time7) / 7)

然后,您可能需要在group by子句中添加一些内容,具体取决于您希望计算平均值的级别。

答案 1 :(得分:0)

您应首先计算行(time1 + time2 + ... time7)/7的平均值 然后计算所有行的平均值AVG((time1 + time2 + ... time7)/7)

答案 2 :(得分:0)

我认为你的问题是取平均值。我首先计算每行的总和和计数,然后左连接来添加国家。获得表格数据后,您可以汇总并执行跨国家/地区,猫或两者的平均值。像这样:

select country, cat_id, (sum(total_time)/sum(count)) as avg_response_time
from (
select a.user_id
      ,a.cat_id
      ,b.country
      ,(a.time1 + a.time2 + a.time3 + a.time4 + a.time5 + a.time6 + a.time7) as total_time
      ,7 as count
from a
left outer join b
on a.user_id = b.user_id
)
group by country, cat_id