『百日百题 · SQL篇』备战面试,坚持刷题—— 高级查询

Posted abcccccccccccccccode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了『百日百题 · SQL篇』备战面试,坚持刷题—— 高级查询相关的知识,希望对你有一定的参考价值。

本专栏『百日百题』长期更新,一起加入本刷题计划,一起成长吧! 🏳️‍🌈点击可关注本专栏

文章目录


前言

为什么要学习SQL?

SQL是目前使用最广泛的数据库语言。 不管你是程序员、数据分析师、Web开发者、互联网运营,或者做报表的职场白领,掌握良好的SQL知识对用好数据库是极大的帮助,而且在面试中也会对SQL进行一定程度的考察,所以说我们学习SQL是非常必要,也是非常重要的!

为什么要刷题?

编程要在实践中学习,就像游泳要通过游泳来练习。很多学生喜欢把编程当成古诗词去背诵,背诵各种语法,这样是不对的。

学编程应该像学开车一样。教练给学员讲解基本步骤后,主要靠学员在练车过程中去巩固回忆,更多时候靠的是肌肉记忆。

想要掌握一门语言就得,对其多加练习,这样才能在用到的时候运筹帷幄!

用什么刷题?

这里我极力推荐牛客网,我们平时写算法题都是在Leetcode之类上面的,当然Leetcode上面也有SQL相关题目,但是必须得会员才可以刷,这对很多人都不太友好。而牛客网就不一样了。

牛客网上面的SQL题目几乎都是免费的,大家只要想刷就可以刷,而且牛客网不只是一个题目它是教学平台,都配有视频讲解,需要的同学可以去看。最重要的就是牛客网对所有的SQL题目进行了分类,适合不同阶段的同学,所以我极力推荐大家使用牛客网

本专栏文章即将带你从基础SQL语法到复杂SQL语句,循序渐进持续练习,加入刷题计划一起加油吧!


为了方便刷题我直接把牛客网的链接放在下面,大家点击蓝色字体就可以直接进行跳转刷题了!

传送门:刷题传送门

本系列文章即将带你从SQL基础语法到SQL复杂语句,循序渐进持续练习,加入刷题计划一起加油吧!


SQL16 查找GPA最高值

题目:

题解:

SELECT MAX(gpa) AS gpa 
FROM user_profile 
WHERE university = '复旦大学';

考察知识:

使用聚合函数汇总数据,SQL提供的统计函数有:

  • COUNT([DISTINCT] <列名>):统计本列列值个数;
  • SUM( <列名> ):计算列值总和;
  • AVG( <列名> ):计算列值平均值;
  • MAX( <列名> ):求列值最大值;
  • MIN( <列名> ): 求列值最小值。

上面函数在计算过程中均忽略NULL值。

SQL17 计算男生人数以及平均GPA

题目:

题解:

SELECT 
	COUNT(gender) AS male_num, 
	ROUND(AVG(gpa),1) AS avg_gpa 
FROM user_profile
WHERE gender='male' ;

考察知识:

浮点数的平均值可能小数点位数很多,按照示例保存一位小数,用ROUND()函数。

ROUND() 函数:用于把数值字段舍入为指定的小数位数,语法格式为:

SELECT ROUND(column_name,decimals) 
FROM table_name;

其中:

  • column_name :要舍入的字段
  • decimals :要返回的小数位数

SQL18 分组计算练习题

题目:

题解:

SELECT 
	gender,
	university,
	COUNT(*)user_num,
	AVG(active_days_within_30) AS avg_active_days,
	AVG(question_cnt) AS avg_quesition_cnt
FROM user_profile
GROUP BY gender,university;

考察知识:

对查询结果进行分组计算:

  • 作用:可以控制计算的级别:对全表还是对一组。
  • 目的:细化计算函数的作用对象。

分组语句的一般形式:GROUP BYHAVING

GROUP BY:通常用来与聚合函数(aggregate functions such as COUNT, SUM, AVG, MIN, or MAX)联合使用来得到一个或多个列的结果集。

  • GROUP BY子句中的分组依据列必须是表中存在的列名,不能使用AS子句指派的结果集列的别名。
  • 带有GROUP BY 子句的SELECT语句的查询列表中只能出现分组依据列或统计函数,因为分组后每个组只返回一行结果。

SQL19 分组过滤练习题

题目:

题解:

SELECT 
	university,
	AVG(question_cnt) AS avg_question_cnt,
	AVG(answer_cnt) AS avg_answer_cnt
FROM user_profile
GROUP BY university
HAVING avg_question_cnt < 5 OR avg_answer_cnt < 20;

考察知识:

使用HAVING子句用于对分组后的结果再进行过滤,它的功能有点像WHERE子句,但它用于组而不是单个记录。

在HAVING子句中可以使用统计函数,但在WHERE子句中则不能。

HAVING通常与GROUP BY子句一起使用。

SQL20 分组排序练习题

题目:

题解:

SELECT 
    university,
    AVG(question_cnt) AS avg_quesition_cnt
FROM user_profile
GROUP BY university
ORDER BY avg_quesition_cnt ASC;

考察知识:

关于WHEREGROUP BYHAVING

当查询语句的目标列中包含聚合函数时,若没有分组子句,则目标列中只能写聚合函数,而不能再写其他列名。若包含分组子句,则在查询的目标列中除了可以写聚合函数外,只能写分组依据列。

  • WHERE子句用来筛选FROM子句中指定的数据源所产生的行数据。
  • GROUP BY子句用来对经WHERE子句筛选后的结果数据进行分组。
  • HAVING子句用来对分组后的结果数据再进行筛选。

对于可以在分组操作之前应用的搜索条件,在WHERE子句中指定它们更有效,这样可以减少参与分组的数据行。

在HAVING子句中指定的搜索条件应该是那些必须在执行分组操作之后应用的搜索条件。

建议将所有行搜索条件放在WHERE子句中而不是HAVING子句中

结语

为了方便刷题我直接把刷题网站的链接放在下面,大家点击蓝色字体就可以直接进行跳转刷题了!

传送门:刷题神器

刷题这件事,大家一定要认真起来,不可懈怠!

日积月累,方成大器!

以上是关于『百日百题 · SQL篇』备战面试,坚持刷题—— 高级查询的主要内容,如果未能解决你的问题,请参考以下文章

面试题百日百刷-kafka篇

锁屏面试题百日百刷-Redis篇

面试题百日百刷-kafka篇

面试题百日百刷-kafka篇

锁屏面试题百日百刷-Redis篇

锁屏面试题百日百刷-kafk篇