每个学号个数两列的sql语句(显示两列)_SQL数据分析 - 6 SQL求职面试题

这篇博客整理了SQL查询的多种技巧,包括简单查询、汇总分析、复杂查询和多表查询。涉及内容如:查询特定姓名学生、课程成绩统计、分组取最大最小值、多表联结操作以及行转列等,适合SQL面试复习。
摘要由CSDN通过智能技术生成

一、简单查询

1.1 查询姓“猴”的学生名单

213c28f7ced27da9c9edd78294501720.png

1.2 查询姓名中最后一个字是“猴”的学生名单

89953be5561381dd05bb413a645d9719.png

1.3 查询姓名中带“猴”的学生名单

7b3dbf6e6a30eb592a54c009d87bb4ad.png

2. 查询姓“孟”老师的个数

8f47eb145e6d3df5e7fca103ac2a54cb.png

二、汇总分析

  1. 查询课程编号为"0002"的总成绩

79b9d8801bd480d261db257e75060ebe.png

2. 查询选了课程的学生人数

58c35e85af4ba41c51d0293c048a54c9.png

3. 查询各科成绩最高和最低的分

dbf080ed0bd6d505a364ccf285743dbc.png

4. 查询每门课程被选修的学生数

97f85dd6105d86014a4ae0f7dc3daf5c.png

5. 查询男生、女生人数

23b11817745554a56c4fa1dcedf025f5.png

6. 查询平均成绩大于60分学生的学号和平均成绩

33a6787e988a6a2bcf7a1dc0a7a45718.png

7. 查询至少选修两门课程的学生学号

0be64b981b7c989625f0c558752a54b9.png

8. 查询同名同姓学生名单并统计同名人数

9a0c2217c5b34d4585291b928ee5b89e.png

9. 查询不及格的课程并按课程号从大到小排列

d8e64587f78ecb23b44cdb017e353cf9.png

10. 查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

9bd13f5cfdefdd89507ecbad5f90b360.png

11. 检索课程编号为“0004”且分数小于60的学生学号,结果按分数降序排列

c80c896ccbdd3c81d1656d7f3d65744a.png

12. 统计每门课程的学生选修人数(超过2人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序

90f96c2caf5a4f7890deb55cf5a66645.png

13. 查询两门及以上不及格课程的同学的学号及其平均成绩

f080088148b3dbe7a214e865d2ba7e9b.png

三、复杂查询

  1. 查询所有课程成绩小于60分学生的学号、姓名

e7f9499e3104fa194d82e27a1242cad3.png

2. 查询没有学全所有课的学生的学号、姓名

22a31611e8d4f095181bb9d86a7d7047.png

3. 查询出只选修了两门课程的全部学生的学号和姓名

13677b4250ad33e5dfda9d04fd1c3208.png

4. 查询出1990年出生的学生名单

64ef2af19a425a63386376a04129c070.png

【面试题类型】topN问题

  • 分组取每组最大值

案例:按课程号分组取成绩最大值所在行的数据

Tips:利用关联子查询

8fc60a6b5d2f58bca6b24124577c7037.png
  • 分组取每组最小值

案例:按课程号分组取成绩最小值所在行的数据

Tips:同样利用关联子查询

cd9cde9a76786ed6d2729b8d690f106c.png
  • 每组最大的N条记录

案例:查询各科成绩前两名的记录

08d25e96a7b185600735c95723aae29f.png

四、多表查询

问题:下面是学生的名单,表名为“学生表”;近视学生的名单,表名为“近视学生表”。请问不是近视眼的学生都有谁?(“学生表”表中的学号与“近视学生表”表中的学生学号一一对应)

bc6a8acec9ef1c861b7209dc6f711e0d.png

遇到要查找“不在表里的数据,也就是在表A里的数据,但是不在表B里的数据。”可以使用下图黑框里的sql语句(在left join和right join的基础上添加限制条件)

df46f210dc8998f2b20631a38b907a9c.png

4d432ee9cf167af9fae964ea6775f249.png

【举一反三】

查找“不在表里的数据”应用案例:

某网站包含两个表,顾客姓名表(表名Customers)和购买记录表(表名Orders)。找出所有从不订购任何东西的客户。(“顾客姓名表”表中的ID与“购买记录表”表中的学生学号CustomerId一一对应)

103c2e58d718274987a8f9d85a36e4cc.png

0bc5db3b9f1909dfdc5fb05a1d13d785.png

练习:联结

  1. 查询所有学生的学号、姓名、选课数、总成绩

e2064e02c4f4c4669e234755c74ea3e4.png

2. 查询平均成绩大于85的所有学生的学号、姓名和平均成绩

40f03d17c37a89de09ddf4be7ac27626.png

3. 查询学生的选课情况:学号,姓名,课程号,课程名称

988dbbc87396fbfe75b2b1629caa954f.png

Case表达式练习:

  1. 查询出每门课程的及格人数和不及格人数

d0390870edde8417cea3439ef61dee64.png

2. 使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称

66cd87430b45f84a1d93bcd61b3b45ee.png

内联结练习:

  1. 查询课程编号为0003且课程成绩在80分以上的学生的学号和姓名

514a4e49812e7eefc98c80fcfab00d3d.png

【sql行转列】

下面是学生的成绩表(表名score,列名:学号、课程号、成绩)

d7612c9d78c586a0a7bdaa8d8fbfa284.png

使用sql实现将该表行转列为下面的表结构

2ef6ea6dd4642449c842d8c5bd01cd05.png

可以分为三步:

第一步:使用都是常量的列输出目标表的结构

select 学号,'课程号0001','课程号0002','课程号0003'

from score;

59a0cd51166acf141663feda0f01e0e3.png

第二步:使用case表达式,来替换常量列对应的成绩

select 学号,

(case 课程号 when '0001' then 成绩 else 0 end)

as '课程号0001',

(case 课程号 when '0002' then 成绩 else 0 end)

as '课程号0002',

(case 课程号 when '0003' then 成绩 else 0 end)

as '课程号0003'

from score;

9e2daffb5d16772b989e7f3a590df728.png

在这个查询结果中,每一行实际表示了某个学生某一门课程的成绩。例如,第一行是'学号0001'选修'课程号00001'的成绩,而其他两列的'课程号0002'和'课程号0003'成绩为0。

每个学生选修某门课程的成绩在下图的每个方块内。我们可以通过分组,取出每门课程的成绩。

61ea2e34861a17e0387468fe58d0d2b9.png

第三步:分组,并且使用最大值函数max取出上图每个方块里的最大值

select 学号,

max(case 课程号 when '0001' then 成绩 else 0 end)

as '课程号0001',

max(case 课程号 when '0002' then 成绩 else 0 end)

as '课程号0002',

max(case 课程号 when '0003' then 成绩 else 0 end)

as '课程号0003'

from score

group by 学号;

2df7bcec96804052c1c6c3f44e5f7a58.png

这样就达到了行列互换的目的。

以上就是第六节课程《sql求职面试题》的内容。

PS. 部分题目其实是之前课程里的例题,但是有些做起来也不是那么顺手,会有出现混淆等问题,需要提醒自己有空能经常回顾之前的课程内容并且进行练习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值