前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >假期闲的慌,不如做一点SQL基础练习吧

假期闲的慌,不如做一点SQL基础练习吧

作者头像
开心鸭
发布2020-10-26 14:40:02
4190
发布2020-10-26 14:40:02
举报

假期有人问鸭哥为啥SQL排序不是按照字母顺序来的?

答案是,UTF-8不是按照字母顺序,汉字GBK是按照字母顺序。

代码语言:javascript
复制
[1]select sum(成绩)
from score
where 课程号='0002'

[2]select count(distinct 学号) as 学生人数
from score
代码语言:javascript
复制
[1]select 课程号,max(成绩) as 最高分,min(成绩) as 最低分 
from score
group by 课程号

[2]select 课程号,count(学号)
from score
group by 课程号

[3]select 性别,count(*)
from student
group by 性别
代码语言:javascript
复制
[1]select 学号,average(成绩)
from score
group by 学号
having  avg(成绩)>60;
[2]select 学号,count(课程号) as 选修课程数目
from score
group by 学号
having count(课程号) >=2;
[3]select 姓名,count(*) as 人数
from student
group by 姓名
having count(*)>=2;
代码语言:javascript
复制
select 课程号,avg(成绩)
from socre
group by 课程号
having avg(成绩)>=80;
代码语言:javascript
复制
[1]select 课程号
from score
where 成绩<60
order by 课程号 desc;
[2]
select 课程号,avg(成绩) as 平均成绩
from score
group by 课程号
order by 平均成绩 asc,课程号 desc;

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

代码语言:javascript
复制
select 学号
from score
where 课程编号=‘04’ and 成绩<60
order by 分数 desc;

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

代码语言:javascript
复制
select 课程号,count(学号) as '学生选修人数'
from score
group by 课程号
having count(学号)>2
order by 学生选修人数 desc,课程号 asc;

面试题:查询两门以上不及格课程的同学的学号及不及格课程的平均成绩

代码语言:javascript
复制
select 学号,avg(成绩)
from score
where 成绩<60 
group by 学号
having count(学号)>2

接下来我们做sqlzoo的题

考察 not in

注意升序其实可以忽略不写asc也没关系

这道题值得一说,题目要求查找1984年获奖者和主题按主题和获胜者名称排序,并把化学奖和物理奖排到最后显示。

这道题排序的思路是,用in('Physics','Chemistry')来如果不在里面的话返回0,在里面的话返回1,然后默认升序0-1,所以如果属于物理和化学返回1,自然就到后面去了。

总结:有时候鸭哥自己也会迷惑什么时候用group by,其实很简单,主要脑海里牢牢记住SQL的执行顺序,想一下每一步返回的这个表是个啥东西,然后看看select里面的内容有没有冲突,有冲突或者说是两个完全不一样的表,那么就可以用group by 合成。另外注意在where后面是不可以加函数的!!

好了鸭哥祝大家前程似锦,886

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 假期有人问鸭哥为啥SQL排序不是按照字母顺序来的?
  • 检索课程编号为“04”且分数小于60的学生学号,结果按按分数降序排列
  • 统计每门课程的学生选修人数(超过2人的课程才统计),要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序。
  • 面试题:查询两门以上不及格课程的同学的学号及不及格课程的平均成绩
  • 接下来我们做sqlzoo的题
  • 总结:有时候鸭哥自己也会迷惑什么时候用group by,其实很简单,主要脑海里牢牢记住SQL的执行顺序,想一下每一步返回的这个表是个啥东西,然后看看select里面的内容有没有冲突,有冲突或者说是两个完全不一样的表,那么就可以用group by 合成。另外注意在where后面是不可以加函数的!!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档