当前位置: 首页 > news >正文

sql 转置_SQL -- 练习汇总

6779d3410cd9454a110462150a62d2ca.png

一、SQL知识相关应用

涉及表如下:

7c147d4b71d8f0f920ef3d8a752b9e56.png

(一)简单查询

1、查询姓“猴”的学生名单。

select * from student where 姓名 like '猴%';

2、查询姓名中最后一个字“猴”的学生名单。

select * from student where 姓名 like '%猴';

3、查询姓名中带“猴”的学生名单。

select * from student where 姓名 like '%猴%';

4、查询姓“孟”老师的个数。

select count(教师号) from teacher  where 教师姓名 like '孟%';

(二)汇总分析

1、查询课程编号为“0002”的总成绩。

select sum(成绩) from score where 课程号='0002';

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

select count(distinct 学号) as 学生人数 from score;

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

select 课程号,max(成绩)as 最高分,min(成绩) as 最低分 from score group by 课程号;

4、查询每门课程被选修的学生数。【学号作为主键,默认具有唯一约束特性】

select 课程号,count(学号) from score group by 课程号;

5、查询男生、女生人数。【性别分组,直接对分组项计数】

select 性别,count(*) from student group by 性别;

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

select 学号,avg(成绩) from score group by 学号 having avg(成绩)>60;

7、查询至少选修两门课程的学生学号。【对课程号计数】

select 学号,count(课程号) as 选课数 from score group by 学号 having count(课程号)>=2;

8、查询同名同姓学生名单并统计同名人数。【对姓名计数】

select 姓名,count(姓名) as 同名同姓数量 from student group by 姓名 having count(姓名)>1;

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

select 课程号 from score where 成绩<60 order by 课程号 desc;

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

select 课程号,avg(成绩) as 平均成绩 from score group by 课程号 order by avg(成绩) asc,课程号 desc;

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

select 学号 from score where 课程号='0004' and 成绩<60 order by 成绩 desc;

12、统计每门课程的学生选修人数(超过2人的课程才统计)。

要求:结果输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排列。

select  课程号,count(学号) from score group by 课程号 having count(学号)>2
order by count(学号) desc,课程号 asc;

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

select 学号,avg(成绩) as 平均成绩 from score where 成绩<60 group by 学号 having count(成绩)>=2;

(三)复杂查询

1、查询所有课程成绩小于60分学生的学号、姓名。 【最高成绩小于60】

select 学号,姓名 from  student where 学号 in (select 学号 from score group by 学号 having max(成绩)<60);

2、查询没有学全所有课的学生的学号、姓名。【三表串联】

select 学号,姓名 from student where 学号 in (select 学号 from score 
group by 学号 having count(学号) <(select count(课程号) from course);

3、查询出只选修了两门课程的全部学生的学号和姓名。【学号分组,in】

select 学号,姓名 from student where 学号 in (select 学号 from score group by 学号 having count(课程号)=2);

4、1990年出生的学生名单。

select 学号,姓名 from student where year(出生日期) = '1990';

5、常见问题:如何找到每个类别下用户最喜欢的产品是哪个?如何每个类别下用户点击最多的5个商品是什么?

按课程号分组取得成绩最大值所在行的数据。【内外课程号一致】

select * from score as a where 成绩 = (select max(成绩) from score as b where a.课程号=b.课程号 group by 课程号); 

6、按课程号分组取得成绩最小值所在行的数据。

select * from score as a where 成绩 = (select min(成绩) from score as b where a.课程号=b.课程号 group by 课程号);

7、查询各科成绩前两名的记录。 【order by/limit 最后执行】

(select * from score where 课程号='0001' order by 成绩 desc limit 2)
union all
(select * from score where 课程号='0002' order by 成绩 desc limit 2)
union all
(select * from score where 课程号='0003' order by 成绩 desc limit 2);

(四)多表查询

1、不是近视的学生都有谁?学生表:学号,姓名;近视表:序号,学生学号。

select a.姓名 as 不近视名单 from 学生表 as a left join 近视表 as b on a.学号=b.学生学号 where b.学生学号 is null;

2、查询所有学生的学号、姓名、选课数、总成绩。【学号分组】

select a.学号,a.姓名,count(b.课程号) as 选课数,sum(b.成绩) as 总成绩 from student as a left join score as b 
on a.学号=b.学号 group by a.学号;

3、查询平均成绩大于85的所有学生的学号、姓名和平均成绩。【学号分组】

select a.学号,a.姓名,avg(b.成绩) as 平均成绩 from student as a left join score as b 
on a.学号=b.学号 group by a.学号 having avg(b.成绩)>85;

4、查询学生的选课情况:学号、姓名,课程号,课程名称。

select a.学号,a.姓名,c.课程号,c.课程名称  from student as a inner join
score as b on a.学号=b.学号 inner join course as c on b.课程号=c.课程号;

5、查询出每门课程的及格人数和不及格人数。【case】

 select 课程号,sum(case when 成绩>=60 then 1  else 0  end) as 及格人数,
sum(case when 成绩<60 then 1  else 0  end) as 不及格人数 from score group by 课程号;

6、使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称。【right join ,group by】

select a.课程号,b.课程名称,
sum(case when 成绩 =<100 and 成绩>=85 then 1 else 0 end) as '[100-85]',
sum(case when 成绩 <85 and 成绩>=70 then 1 else 0 end) as '[85-70]',
sum(case when 成绩 <70 and 成绩>=60 then 1 else 0 end) as '[70-60]',
sum(case when 成绩 <60 then 1 else 0 end) as '[<60]',
from score as a right join course as b on a.课程号=b.课程号 group by a.课程号,b.课程名称; 

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

select 学号,姓名 from student as a inner join score as b on a.学号=b.学号 
where b.课程号='0003'and b.成绩>80;

8、用sql实现成绩表(score)的转置。 ‍

select 学号,max(case 课程号 when '0001' then 成绩 else 0 end ) as '课程号0001',
max(case 课程号 when '0002' then 成绩 else 0 end )'课程号0002',
max(case 课程号 when '0003' then 成绩 else 0 end )'课程号0003'
from score group by 学号;

二、SQL:练习汇总逻辑图

41914df7c069465d869266c7c9c0c4a3.png

e5543991a7300eaea4dacb3886c25e1e.png

相关文章:

  • python语言中打印到屏幕上的函数是什么_Python基础之白话说函数
  • 概率论与数理统计思维导图_2020年基础考试高等数学思维导图
  • 用python画圆角矩形_如何用OpenCV绘制圆角矩形(带圆角的矩形)?
  • vfp控制excel选择全表_Excel快速填充功能,让你输入数据不只是快一点点
  • 遍历list 分组求和_LeetCode刷题实战49:字母异位词分组
  • spark labeledpoint函数用法_Hive常用的函数总结
  • python字符串子串替换方法_python替换字符串中的子串图文步骤
  • 多选框位置调整_水下目标检测竞赛冠军方案:多图像融合增强 | URPC 2019
  • unexpected eof while parsing什么意思_少侠留步!你知道if、while和递归之间的关系吗?...
  • python batch normalization_使用Python实现Batch normalization和卷积层
  • python 模糊匹配库_Python中实现模糊匹配的魔法库:FuzzyWuzzy
  • apache ii评分怎么评_雅思分数怎么算?评分标准了解下
  • 百度搜索接口api_搜索推广丨oCPC投放API接入方式详解
  • python做界面_windows下用python调用HFSS
  • 单元测试用例_3.编写django单元测试用例
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Github访问慢解决办法
  • happypack两次报错的问题
  • If…else
  • IndexedDB
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • oschina
  • PAT A1092
  • Transformer-XL: Unleashing the Potential of Attention Models
  • vue-cli在webpack的配置文件探究
  • 二维平面内的碰撞检测【一】
  • 关于for循环的简单归纳
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 入门到放弃node系列之Hello Word篇
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 原生 js 实现移动端 Touch 滑动反弹
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #《AI中文版》V3 第 1 章 概述
  • #pragma once
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (ros//EnvironmentVariables)ros环境变量
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (ZT)一个美国文科博士的YardLife
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (学习日记)2024.01.09
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .“空心村”成因分析及解决对策122344
  • .bat批处理出现中文乱码的情况
  • .NET Reactor简单使用教程
  • .net 受管制代码
  • .NET4.0并行计算技术基础(1)
  • .NET开发者必备的11款免费工具
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)