SELECT
question_pass_rate_tab.user_id AS user_id,
question_pass_rate,
pass_rate,
question_per_cnt
FROM
-- 1.question_pass_rate题目正确率, 做对了几道(重复做对只算一次)/ 做了几道题
(
SELECT
user_id,
-- COUNT(DISTINCT IF(result_info = 1, question_id, NULL)),
-- COUNT(DISTINCT question_id),
COUNT(DISTINCT IF (result_info = 1, question_id, NULL)) / COUNT(DISTINCT question_id) question_pass_rate
FROM
done_questions_record
GROUP BY
user_id
) question_pass_rate_tab,
-- 2.pass_rate提交正确率,总提交次数/总正确次数
(
SELECT
user_id,
-- count(*) smit_cnt,
-- count(if(result_info=1,result_info,null))rigth_cnt ,
COUNT(IF (result_info = 1, result_info, NULL)) / COUNT(*) pass_rate
FROM
done_questions_record
GROUP BY
user_id
) pass_rate_tab,
-- 3.question_per_cnt
(
SELECT
user_id,
AVG(smit_cnt) AS question_per_cnt
FROM
(
SELECT
user_id,
COUNT(*) smit_cnt
FROM
done_questions_record
GROUP BY
user_id,
question_id
) smit_cnt_tab -- 子查询的结果是每个人每道题的提交次数
GROUP BY
user_id
) question_per_cnt_tab
WHERE
question_pass_rate_tab.user_id = pass_rate_tab.user_id
AND question_pass_rate_tab.user_id = question_per_cnt_tab.user_id
AND pass_rate_tab.user_id = question_per_cnt_tab.user_id
AND question_pass_rate > 0.6
ORDER BY
user_id
题解思路:
1.question_pass_rate题目正确率, 做对了几道(重复做对只算一次)/ 做了几道题,一张表
2.pass_rate提交正确率,总提交次数/总正确次数,两张表
3.3.question_per_cnt,子查询的结果是每个人每道题的提交次数,三张表
4.将以上三张表使用普通连接,并筛出question_pass_rate > 60% 的用户,按照user_id排序

京公网安备 11010502036488号