mysql 的奇妙历险

这几天在练习sql的时候,碰到下面几个题, 如下

他的表字段是这些

create table Student(

SId varchar(10), # 学生id

Sname varchar(10), # 学生姓名

Sage datetime, # 学生出生日期

Ssex varchar(10) # 学生性别

);

create table Course(

CId varchar(10), # 课程id

Cname nvarchar(10), # 课程名

TId varchar(10) # 任课教师id

);

create table Teacher(

TId varchar(10), # 任课教师id

Tname varchar(10) # 教师姓名

);

create table SC(

SId varchar(10), # 学生id

CId varchar(10), # 课程id

score decimal(18,1) # 分数

);

not in 的使用

之前呢总想着 用子查询 把所满足条件的sid查出来,在通过 in 判断sid是否在满足条件的sid里

思想没有转变,现在有了这样一种思想,用 not in ,来解决不太好用子查询来查询满足条件的查询。 就是通过判断sid他不在那些不满足条件的sid中

-- 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

select s.sid,s.sname,avg(sc.score) from student s join sc on s.sid not in (select distinct sid from sc where sid not in (select sid from sc where score<60 group by sid having count(cid)>=2)) and s.sid=sc.sid group by sid

select s.sid,s.sname,avg(sc.score) from Student s join SC on s.sid=sc.sid join (select sid,count(score) c from sc where score<60 group by sid having c>=2) a on s.sid = a.sid group by s.sid

case when 的应用:

case when 条件 then 返回值 end

-- 查询各科成绩最高分、最低分和平均分: 以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90 要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

select * from (select sc.cid as x,c.cname,max(sc.score) zg,min(sc.score) zd,avg(sc.score) pj from sc join Course c on sc.cid=c.cid group by sc.cid) aa join
(select cid as x,concat(count(CASE WHEN 80>score and score>=70 then '中等' end)/count(cid)*100,'%') zd,
concat(count(CASE WHEN 90>score and score>=80 then '优良' end)/count(cid)*100,'%') yl,
concat(count(CASE WHEN 100>score and score>=90 then '优秀' end)/count(cid)*100,'%') yx,
concat(count(case when score>=60 then '及格' end)/count(cid)*100,'%') jg from sc group by sc.cid) bb on aa.x=bb.x //查询成绩的区间
(select cid,concat(count(CASE WHEN 80>score and score>=70 then '中等' end)/count(cid)*100,'%') zd,
concat(count(CASE WHEN 90>score and score>=80 then '优良' end)/count(cid)*100,'%') yl,
concat(count(CASE WHEN 100>score and score>=90 then '优秀' end)/count(cid)*100,'%') yx,
concat(count(case when score>=60 then '及格' end)/count(cid)*100,'%') jg from sc group by cid)

想用百分比来显示小数 可以用 concat((8/5)*100,'%')

mysql 的奇妙历险的更多相关文章

  1. MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界

    MYSQL(基本篇)--一篇文章带你走进MYSQL的奇妙世界 MYSQL算是我们程序员必不可少的一份求职工具了 无论在什么岗位,我们都可以看到应聘要求上所书写的"精通MYSQL等数据库及优化 ...

  2. [cdoj1380] Xiper的奇妙历险(3) (八数码问题 bfs + 预处理)

    快要NOIP 2016 了,现在已经停课集训了.计划用10天来复习以前学习过的所有内容.首先就是搜索. 八数码是一道很经典的搜索题,普通的bfs就可求出.为了优化效率,我曾经用过康托展开来优化空间,甚 ...

  3. MySQL全面瓦解21(番外):一次深夜优化亿级数据分页的奇妙经历

    背景 1月22号晚上10点半,下班后愉快的坐在在回家的地铁上,心里想着周末的生活怎么安排. 突然电话响了起来,一看是我们的一个开发同学,顿时紧张了起来,本周的版本已经发布过了,这时候打电话一般来说是线 ...

  4. MySQL环境部署

    阅读目录: 1.Windows下安装MySQL 2.Linux下安装MySQL 序章: MySQL是个小型的数据库,用来自己做小项目,做学习练习什么的再适合不过了,不过新手总会被一些莫名奇妙的问题难住 ...

  5. 奇妙的动态代理:EF中返回的对象为什么序列化失败

    今天有如鹏的学生遇到一个问题:把一个对象保存到Session中(进程外Session)后,Web服务器重启,当从Session读取这个对象的时候报错,提示是一个“T_Users”后面跟着一大串数字的类 ...

  6. linux+jre+apache+mysql+tomcat调优

    一.不再为Apache进程淤积.耗尽内存而困扰 0. /etc/my.cnf,在mysqld那一段加上如下一行: log-slow-queries=queries-slow.log 重启MySQL 酌 ...

  7. Mysql 与 php动态网站开发 入门教程

    这个系列的教程由表单开始写,因为表单可以把数据库和web 之间的交互表现得很明显.提交表单 ,数据库记录注册信息. 本教程属于基础教程.大神请略过.        对于php和mysql之间的稳固性很 ...

  8. mysql导出部分数据的几种方法(摘录)

    mysql虽然可以使用mysqldump来进行数据的到处,可是在很多场合的需求都不一样,比如我只要导出某个字段呢?只要导出某些我需要的数据呢? 这个时候mysqldump可能就不大好使了 方法一. i ...

  9. 由max_allowed_packet引发的mysql攻防大战

    1.原因 程序的sql语句比较长.max_allowed_packet默认是1024.于是就报错了.一开始手动改 global max_allowed_packet ,改完后.莫名奇妙被还原.后来改配 ...

随机推荐

  1. git文件管理与索引,深入理解工作原理

    前言 这一夜,注定是个不眠之夜,小白和cangls的对话已然进入了白热化.小白孜孜不倦的咨询关于git方面的知识,对索引越来越感兴趣.小白以前存的小电影文件可以进行版本的对比,探索哪个版本画质更好. ...

  2. Sentry 开发者贡献指南 - 什么是 Scope, 什么是 Hub?

    当一个事件被捕获并发送到 Sentry 时,SDK 会将该事件数据与来自当前 scope 的额外信息合并.SDK 通常会在框架集成中为您自动管理 scope,您无需考虑它们.但是,您应该知道 scop ...

  3. linux解析映射文件与自动加载脚本

    目录 一 :解析映射文件 1.解析文件的由来之主机名: 2.解析映射文件(DNS) 二:磁盘挂载文件 三:开机自动加载脚本 一 :解析映射文件 1.解析文件的由来之主机名: 无论是在局域网还是在INT ...

  4. linux可用内存判断

    free是完全没有占用的空闲内存,Available 减 free是操作系统为了优化运行速度拿来调用的内存, 程序需要的话操作系统会进行释放.所以一般看Available即可. free+buffer ...

  5. python 小兵(5)参数

    我们目前为止,已经可以完成一些软件的基本功能了,那么我们来完成这样一个功能:约x 1 2 3 4 5 pint("拿出手机") print("打开陌陌") pr ...

  6. django之集成七牛云对象存储

    Python3 + Django2.0 集成 "七牛云" 对象存储 (SDK文档地址:http://developer.qiniu.com/kodo/api/3928/error- ...

  7. 使用Hot Chocolate和.NET 6构建GraphQL应用(6) —— 实现Query排序功能

    系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 从前几篇文章可以看出,使用Hot Chocolate实现GraphQL接口是比较简单的,本篇文章我们继续查询 ...

  8. windows平台编码转换

    int AsciiToUtf8(char* pSrc, unsigned int nSrcLen, char* pBuffer, unsigned int nBufferLen) { assert(p ...

  9. go基础——数值传递与值传递

    package main import "fmt" /* 1.值类型:存储的是数值本身,数据传递给其他变量时传递的是数据的副本. int,float,string,bool,arr ...

  10. Docker名词解释

    http://www.runoob.com/docker/docker-architecture.html