0

質問に回答したユーザーの記録と試行回数を保持する MySQL テーブルがあります。それは次のようなものです:

username trials
-------- ------
user1    10
user2    7
user1    20

など。そこから、彼らが質問に何回答えたかを計算できます ( COUNT)。そして今、平均試行回数を計算したい、つまり次の表を取得したい:

username avg
-------- ---
user1    15
user2    7

私はこのクエリを試しました:

SELECT(a.totalguess/b.totalknow) as avg FROM( SELECT username, SUM(trials) AS totalguess FROM thetable GROUP BY username) a, (SELECT username, COUNT(*) as totalknow FROM thetable GROUP BY username)b WHERE a.username=b.username;

そしてそれは与えただけ

avg
---
15
7

非常に近いです!しかし、知っている人なしで。おそらくphpと組み合わせることができますが、純粋なMySQLソリューションが必要です。それで、私は何をすべきですか?前もって感謝します!

4

5 に答える 5

3
SELECT username as knower, AVG(trials) as theavg
FROM mytable
GROUP BY username

あなたにこれを与えるでしょう:

knower, theavg

user1, 15
user2, 7
于 2013-01-15T19:05:03.257 に答える
2
SELECT a.knower, (a.totalguess/b.totalknow) as avg 
FROM (SELECT knower, SUM(trials) AS totalguess FROM thetable GROUP BY knower) a, 
     (SELECT knower, COUNT(*) as totalknow FROM thetable GROUP BY knower)b 
WHERE a.knower=b.knower;

または単に:

SELECT knower, SUM(trials)/COUNT(*) as avg -- or you can just use AVG(trials)
FROM thetable 
GROUP BY knower
于 2013-01-15T19:01:37.593 に答える
1

これは1つのクエリで実行できます。

      SELECT knower, SUM(trials)/count(*)
      from thetable
      group by knower
于 2013-01-15T19:04:15.680 に答える
0

最初のSELECTステートメントは、返される列を決定します。今あなたは持っています

SELECT(a.totalguess/b.totalknow) as avg FROM ...

したがって、「avg」と呼ばれる1つの列のみが返されます。したがって、選択リストに知識人を追加します。

SELECT a.knower as knower,
       (a.totalguess/b.totalknow) as avg
FROM
...
于 2013-01-15T19:04:07.317 に答える
0
SELECT knower, AVG(trials) FROM thetable GROUP BY knower
于 2013-01-15T19:04:43.617 に答える