题目主要信息:
- 试卷的类别 tag 可能出现大小写混乱的情况,先筛选出试卷作答数小于3的类别tag,统计将其转换为大写后对应的原本试卷作答数。
- 如果转换后 tag 并没有发生变化,不输出该条结果。
问题拆解:
- 筛选出当前 tag 与转换为大写 tag 后不同的考试信息。按照 tag 聚合统计出现的次数。知识点:UPPER, GROUP BY, COUNT
- tag != UPPER(tag)
- 根据 tag 进行 GROUP BY 操作,通过 COUNT(1) 统计每个 tag 对应的作答数
- 统计每个 tag 的作答数,将上述两表进行 INNER JOIN。JOIN 时需要判断 UPPER(origin.tag) = upper_table.tag
- 在符合条件的记录中筛选出原始出现次数小于三次的 tag,输出结果。知识点:WHERE
代码:
SELECT
origin.tag,
upper_table.answer_cnt
FROM
(
SELECT tag, COUNT(1) AS answer_cnt
FROM exam_record LEFT JOIN examination_info
ON exam_record.exam_id = examination_info.exam_id
WHERE tag != UPPER(tag)
GROUP BY tag
) AS origin
INNER JOIN
(
SELECT tag, COUNT(1) AS answer_cnt
FROM exam_record LEFT JOIN examination_info
ON exam_record.exam_id = examination_info.exam_id
GROUP BY tag
) AS upper_table
ON UPPER(origin.tag) = upper_table.tag
WHERE
origin.answer_cnt < 3