2017-03-03 15 views
0

cat_idとに基づいて、すべてのユーザーの平均応答時間を計算したい別のテーブルに格納されているこのテーブルを持っています。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残念ながら、私はデータベース内の何かを変更することはできません。また、これは '' users''テーブルからのもので、 '' Join''を実行して '' country''を得ることができます。 + ---- + --------- + | 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はサポートしていません...() –

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