【场景】:大小写转换

【分类】:字符串函数、upper()

分析思路

难点:

1.相同表做连接搜索不同的值

(1)统计被作答的试卷的类型和作答次数

(2)筛选出试卷作答数小于3的类别tag,统计将其转换为大写后对应的原本试卷作答数

  • [条件]:where a.answer_cnt <3 and upper(a.tag)!= a.tag。

  • [使用]:join 连接条件:upper(a.tag) = b.tag。需要查询出转换大写后的作答次数,如果转换后tag并没有发生变化,不输出该条结果。

扩展:

前往查看:***********

求解代码

方法一:

表与自身做连接 + upper()

#被作答的试卷的类型和作答次数
with
    main as(
        select 
            tag,
            count(start_time) as answer_cnt
        from examination_info
        join exam_record using(exam_id)
        group by tag
)
#筛选出试卷作答数小于3的类别tag,统计将其转换为大写后对应的原本试卷作答数
select 
    a.tag,
    b.answer_cnt
from main a
join main b on upper(a.tag) = b.tag
where a.answer_cnt <3 and upper(a.tag)!= a.tag