SQL46 大小写混乱时的筛选统计
题目主要信息:
- 试卷的类别tag可能出现大小写混乱的情况,请先筛选出试卷作答数小于3的类别tag,统计将其转换为大写后对应的原本试卷作答数
- 如果转换后tag并没有发生变化,不输出该条结果
问题拆分:
- 选出每个标签的试卷对应的作答数:
- 以试卷标签tag作为分组。知识点:group by
- 标签信息与作答信息分布两个表中,依靠exam_id将表exam_record与表examination_info连接起来。知识点:join...on...
- 用每组的开始作答时间统计每组的作答数。知识点:count
- 筛选结果记为a
- 用上述相同的方式筛选出一个相同的表b
- 将表a和表b连接,连接项当且仅当表a中的标签不等于表b中的标签,但是表a中的标签转成大写以后等于表b中的标签,且表中该标签对应的作答数小于3.
on a.tag != b.tag and upper(a.tag) = b.tag and a.answer_cnt < 3
知识点:join...on...、upper()
- 从连接后的表中选出表a项的tag及表b项的作答数作为输出。
代码:
select a.tag as tag,
b.answer_cnt as answer_cnt
from(
select tag,
count(start_time) as answer_cnt
from exam_record e_r join examination_info e_i
on e_r.exam_id = e_i.exam_id
group by tag
) a join(
select tag,
count(start_time) as answer_cnt
from exam_record e_r join examination_info e_i
on e_r.exam_id = e_i.exam_id
group by tag
) b
on a.tag != b.tag
and upper(a.tag) = b.tag
and a.answer_cnt < 3