Mysql 如何获得每个用户给出解决方案(查询)的平均次数

Mysql 如何获得每个用户给出解决方案(查询)的平均次数,mysql,sql,database,Mysql,Sql,Database,假设我有这些桌子: 用户:id 问题:身份证 解决方案:id、用户id、问题id 如何获得每个用户解决每个问题的次数 我的结果集中需要这样的东西: user_id problem_id times ------- ---------- ----- 1 1 3 1 2 4 2 2 8 2 3 1 然后我需要每个问题解决的平均时间: problem_id

假设我有这些桌子:

用户:id

问题:身份证

解决方案:id、用户id、问题id

如何获得每个用户解决每个问题的次数

我的结果集中需要这样的东西:

user_id  problem_id  times
-------  ----------  -----
1        1           3
1        2           4
2        2           8
2        3           1
然后我需要每个问题解决的平均时间:

problem_id  avg
----------  ---
1           3
2           6
3           1
我认为这是类似于:

SELECT problem_id, avg(times) as avg from
       (SELECT user_id, problem_id, count(*) as times FROM solution
               group by user_id) sample
       group by problem_id;

但结果集看起来并不正确。我不知道…

下面的查询将为您提供第一个表中指定的结果

SELECT 
    user_id
    , problem_id
    , COUNT(*) AS times
FROM
    solution
GROUP BY
    user_id
    , problem_id
第二个问题对我来说似乎有点奇怪,你似乎得到了用户回答该问题的平均次数,但这不是我判断你的要求的地方。如前所述,您的查询就要到了,它应该就GROUPBY子句中提供的参数(不包括聚合函数中未包含的所有返回列)向您发出错误警告

SELECT 
    problem_id
    , AVG(times) AS avg 
FROM
    (  SELECT 
           user_id
           , problem_id
           , COUNT(*) AS times
       FROM
            solution
       GROUP BY
           user_id
           , problem_id
    ) userCounts
GROUP BY 
    problem_id;
或者,如果您希望避免子查询,则应采用以下方法:

SELECT 
    problem_id
    , (COUNT(DISTINCT id) / COUNT(DISTINCT user_id)) AS avg 
FROM
    solution
GROUP BY 
    problem_id;

上面的查询都在下面的

中演示。您需要在内部查询中按用户id、问题id分组。您需要模式、中位数还是平均值?