2017-03-03 117 views
0

我有這個表,我想計算基於該cat_id和基於該user_id的國join其存儲在另一個表中的所有用戶的平均響應時間。計算其他平均數的平均值在MySQL

找到基於用戶國家的平均時間的正確方法是什麼?

+---------+--------+-------+-------+-------+-------+-------+-------+-------+ 
| 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)但是當我交叉檢查結果是不正確的。

預先感謝任何幫助:)

+1

1.標準化您的模式。任何時候你發現自己在列舉的列中,警鐘應該開始響起。除此之外,這裏沒有任何國家,所以這個問題是不可解決的。 – Strawberry

+0

@Strawberry不幸的是我無法改變數據庫中的任何東西。此外,這是來自「用戶」表,我可以執行「加入」並獲取「國家」表格。 id |國家| + ---- + --------- + | 0 | TEEEST | | 1 | TEEEST | | 2 | TEEEST | | 3 | TEEEST | + ---- + --------- + – kappammi

+1

在這種情況下創建一個視圖,如下所示:'SELECT user_id,cat_id,1 time_no,time1 time FROM my_table UNION ALL SELECT user_id,cat_id,2,time2 FROM my_table ... etc.'然後將該視圖用於下一部分問題 – Strawberry

回答

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

MySQL不支持WITH ... as() –

+0

@RaymondNijland我不知道這一點。謝謝!我已經相應更新。 –

+0

@JeremyReal這個工作就像一個魅力,但MysQL堅持說你需要一個''AS somename GROUP BY國家......''。非常感謝! – kappammi

0

首先,有一個與你的括弧內的問題,這應該是

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

那麼你可能需要通過條款的組中添加的東西,這取決於在你想要計算的平均水平上。

0

你應該首先計算平均(time1 + time2 + ... time7)/7行 ,然後計算平均值的所有行AVG((time1 + time2 + ... time7)/7)