Mysql 如何获得每个用户给出解决方案(查询)的平均次数
假设我有这些桌子: 用户:id 问题:身份证 解决方案:id、用户id、问题id 如何获得每个用户解决每个问题的次数 我的结果集中需要这样的东西: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
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分组。您需要模式、中位数还是平均值?