题解 | #未完成试卷数大于1的有效用户#

未完成试卷数大于1的有效用户

https://www.nowcoder.com/practice/46cb7a33f7204f3ba7f6536d2fc04286

为什么出题人在描述中的detail字段的结果展示中和测试用例的结果展示不同?用了三种方式去写,最终结果都是detail字段的顺序问题,他这个描述是真的误导人,

************请注意,在测试用例中,detail字段是按照日期升序排序的。

#统计2021年
#有效用户:完成试卷作答数量 >=1 and 未完成数量 < 5
   #且未完成试卷作答数 > 1

#输出用户ID、未完成试卷作答数、完成试卷作答数、
#detail:作答过的试卷tag集合(start_time的日期:tag),集合元素之间用;隔开
#结果顺序: 按照未完成试卷的数量 从大到小排列
SELECT
    c.uid,
    MAX(c.failedExam) AS incomplete_cnt,
    MAX(c.sucessExam) AS complete_cnt,
    GROUP_CONCAT(
        DISTINCT DATE_FORMAT(d.start_time, '%Y-%m-%d'),
        ':',
        e.tag
        ORDER BY
            d.start_time SEPARATOR ";"
    )  as detail
FROM
    (
        SELECT
            b.uid,
            b.sucessExam,
            b.failedExam
        FROM
            (
                SELECT
                    a.uid,
                    SUM(
                        CASE
                            WHEN a.submit_time IS NOT NULL THEN 1
                            ELSE 0
                        END
                    ) AS sucessExam,
                    SUM(
                        CASE
                            WHEN a.submit_time IS NULL THEN 1
                            ELSE 0
                        END
                    ) AS failedExam
                FROM
                    exam_record a
                WHERE
                    YEAR (a.start_time) = 2021
                GROUP BY
                    a.uid
            ) b
        WHERE
            b.sucessExam >= 1
            AND b.failedExam < 5
            AND b.failedExam > 1
    ) c
    JOIN exam_record d ON c.uid = d.uid
    and year (d.start_time) = 2021
    JOIN examination_info e ON d.exam_id = e.exam_id
GROUP BY
    c.uid
ORDER BY
    complete_cnt

全部评论

相关推荐

尊尼获获:闺蜜在哪?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务