题解 | #大小写混乱时的筛选统计#

大小写混乱时的筛选统计

http://www.nowcoder.com/practice/81cb12931a604811ae69d332515c7734

一、知识点总结与拓展

1)字符串的常见处理
    a、将字母转换为大写格式upper( )
    b、索引式提取substring_index(字段名,'索引符号',位置) 
    c、直接提取substring(字段名,开始位置,结束位置)
    d、计算字符串长度char_length(字段名) 和 length(字段名)
        * length(字段名)汉字算3个字符
        * char_length(字段名) 汉字算1个字符
    e、转换数据格式:cast(字段名 AS 数据类型)

2)表连接
常见的表连接主要有两种方式。
    a、第一种方式是直接从两张表里筛选数据:
        常见的写法有SELECT 字段名 FROM 表名1,表名2(具体的书写案例见下方解题步骤);
    b、第二种方式是使用join来连接数据(左右内外连接)(详见下方连接,之前解题种整理的内容)。

二、解题步骤

1)试卷的类别tag可能出现大小写混乱的情况
  • 字符的大写转换函数upper()
2)请先筛选出试卷作答数小于3的类别tag。
  • 统计各类试卷作答情况,并命名为t1
SELECT tag,COUNT(uid) answer_cnt
FROM exam_record  LEFT JOIN examination_info  USING(exam_id)
GROUP BY tag


3)统计将其转换为大写后对应的原本试卷作答数。
  • 自连接t1表,左边命名为a,右边命名为b
WITH t1 as (
    SELECT tag, COUNT(uid) as answer_cnt
    FROM exam_record
    LEFT JOIN examination_info USING(exam_id)
    GROUP BY tag
)

SELECT a.*, b.*
FROM t1 a,t1 b;#自连接t1表

  • 先看那些大小写被混写的数据:把左边数据都转换为大写后的数据
WITH t1 as (
    SELECT tag, COUNT(uid) as answer_cnt
    FROM exam_record
    LEFT JOIN examination_info USING(exam_id)
    GROUP BY tag
)

SELECT a.*, b.*
FROM t1 a,t1 b
WHERE UPPER(a.tag)=b.tag; #取a表中tag改为大写情况后和b的tag表相同的数据

从上表数据可以看出,目前存在两种情况,第一种情况,左边tag本身就是大写,第二种情况左边tag是小写。

4)如果转换后tag并没有发生变化,不输出该条结果。
  • tag没有变化的意思就是左边的tag和右边的tag是不相等的,即a.tag<>b.tag。
  • 以及加上筛选条件a.answer<3。完成~
WITH t1 AS (
SELECT tag,COUNT(uid) answer_cnt
FROM exam_record  LEFT JOIN examination_info  USING(exam_id)
GROUP BY tag
)
/*建立子表,查询每个tag的答题数*/
SELECT a.tag,b.answer_cnt 
FROM t1 a,t1 b # 表自连接
WHERE UPPER(a.tag)=b.tag #取a表中tag改为大写情况后和b的tag表相同的数据
AND a.tag<>b.tag #取a表的tag为小写b表的tag为大写
AND a.answer_cnt<3;#取小写tag(a表)的作答数小于3的数据


SQL解题集 文章被收录于专栏

这是牛客SQL相关的解题集

全部评论
不知道这题要干嘛,最后一个示例既有小写的web又有大写的WEB是什么鬼,题目意思完全看不懂
1 回复 分享
发布于 2022-05-21 14:59
FROM t1 a,t1 b那里为什么是表自连接啊
点赞 回复 分享
发布于 2023-02-23 15:01 四川
最后一个限制为什么是a.answer_cnt不是b.answer_cnt啊
点赞 回复 分享
发布于 2023-02-23 14:36 四川
请问下,根据题目下面的例子,9001作答次数为4,那么统计作答次数的时候应该统计有分数的,不应该是count(score)吗?
点赞 回复 分享
发布于 2022-05-07 10:47
好详细啊赞
点赞 回复 分享
发布于 2022-04-21 18:51

相关推荐

点赞 评论 收藏
分享
大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
评论
44
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务