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排序