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