【DAY3|SQL自学打卡】高级查询

前言

我使用的学习平台:牛客刷题网

推荐的原因:能够在线编程,非常方便,有题,还能判断对错,也能看到各路大神的解题思路

SLogan:利用有限的时间,撸起袖子加油干!

       学习界面:快来注册学习吧!
在这里插入图片描述

知识点总结

1、排序子句:
ORDER BY <列名> [ASC | DESC ][,<列名> … ]

2、WHERE子句

3、BETWEEN AND 子句

4、过滤空值:
①判断取值为空的语句格式为:列名 IS NULL
②判断取值不为空的语句格式为:列名 IS NOT NULL

5、WHERE IN 和NOT IN :
列名 [NOT] IN(常量1, 常量2,…常量n)

6、AND 和 OR

7、字符匹配
列名 [NOT ] LIKE

以上便是昨天的学习内容,今天我们开始学习高级查询

一、学习过程

1、计算函数

在这里插入图片描述

【SQL16】查找GPA最高值
在这里插入图片描述
解题思路:
  首先解题的思路是先筛选出’复旦大学’‘,其次再选出gpa最高值
这里可以用到MAX( <列名> ):求列值最大值;
代码如下:

SELECT max(gpa) FROM user_profile
WHERE university='复旦大学'

结果:
在这里插入图片描述

【SQL17】计算男生人数以及平均GPA
在这里插入图片描述

解题思路:
  首先看结果可知需要进行表头重命名,用as语法,用以存放男生人数,这里需要用到计数,count()函数;其次是求平均值,使用avg()函数。浮点数的平均值可能小数点位数很多,按照示例保存一位小数,用round()函数
保留小数位数:round(列名,位数)

代码如下:

SELECT 
COUNT(gender) as male_num,ROUND(avg(gpa),1) FROM user_profile
WHERE gender='male'

结果:
在这里插入图片描述

2、分组查询

在这里插入图片描述
【SQL18】分组计算练习题
在这里插入图片描述

解题思路:
  这是一道综合考查题,我们利用上面的知识点去解题。
   分组:GROUP BY

SELECT gender,university,
    COUNT(device_id) AS user_num,
    ROUND(avg(active_days_within_30),1) AS avg_active_day,
    ROUND(avg(question_cnt),1) AS avg_question_cnt
FROM user_profile
GROUP BY gender,university

结果:
在这里插入图片描述

【SQL19】分组过滤练习题
在这里插入图片描述

解题思路:
分组:GROUP BY

注意点!!:使用HAVING子句
HAVING子句用于对分组后的结果再进行过滤,
它的功能有点像WHERE子句,但它用于组而不是单个记录。
在HAVING子句中可以使用统计函数,但在WHERE子句中则不能。
HAVING通常与GROUP BY子句一起使用。

SELECT 
    university,
    round(avg(question_cnt),3) as avg_question_cnt,
    round(avg(answer_cnt),3) as avg_answer_cnt
FROM user_profile
GROUP BY university
HAVING avg_question_cnt<5 OR avg_answer_cnt<20

结果:
在这里插入图片描述

【SQL20】分组排序训练题
在这里插入图片描述

解题思路:
  这是一道综合排序 分组题,我们利用之前涉及到的知识点去解题。

SELECT 
    university,
    ROUND(avg(question_cnt),4) AS avg_question_cnt
FROM user_profile
GROUP BY university
ORDER BY avg_question_cnt ASC

结果:
在这里插入图片描述

总结

  以上,便是今天的SQL学习打卡,最后三个综合题非常好的融合了我们之前学到的知识点。再接再厉,难度一点点加深,希望越学越好!

 我会继续分享我的学习过程

欢迎小伙伴们和我一起坚持打卡,评论区互相监督!

      牛客——不见不散!

猜你喜欢

转载自blog.csdn.net/m0_62279905/article/details/127161796