• 时间:2017-09-11 整理:byzqy

题目:用一条SQL语句查询出每门课都大于80分的学生姓名。

最近面试C#开发工程师,碰到上面这个考数据库的题目,自己感觉有点难度,没有思路,现将找到的解决方案整理如下:

文件:SQLQuery1.sql

/*
环境:Microsoft SQL Server 2012
工具: Microsoft SQL Server Management Studio
数据库: Interview
数据表: grade
详情:
name class score
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
*/ --查询出每门课都大于80分的学生姓名:
--方法1
SELECT DISTINCT name FROM grade WHERE name NOT IN(SELECT DISTINCT name FROM grade WHERE score <= 80);
--方法2
SELECT name FROM grade GROUP BY name HAVING MIN(score) > 80; --查询平均分大于80的学生的姓名:
--方法1
SELECT name FROM (SELECT COUNT(*) AS t,SUM(score) AS num,name FROM grade GROUP BY name) AS a WHERE a.num > 80*t;
--方法2
SELECT name,AVG(score) AS sc FROM grade g1 GROUP BY name HAVING AVG(score) > 80;

代码分解:

--查询出每门课都大于80分的学生姓名:
--方法1
SELECT DISTINCT name FROM grade WHERE name NOT IN(SELECT DISTINCT name FROM grade WHERE score <= 80);
----------------
SELECT DISTINCT name FROM grade WHERE score <= 80         -->查询结果:name 李四 张三
SELECT DISTINCT name FROM grade WHERE name NOT IN('张三','李四') -->查询结果:name 王五
SELECT name FROM grade WHERE name NOT IN('张三','李四')    -->查询结果:name 王五 王五 王五 --方法2
SELECT name FROM grade GROUP BY name HAVING MIN(score) > 80;
----------------
SELECT name FROM grade GROUP BY name                 -->查询结果:name 李四 王五 张三
SELECT name FROM grade GROUP BY name HAVING AVG(score) < 80;   -->查询结果:name 张三 (平均成绩小于80的姓名) --查询平均分大于80的学生的姓名:
--方法1
SELECT name FROM (SELECT COUNT(*) AS t,SUM(score) AS num,name FROM grade GROUP BY name) AS a WHERE a.num > 80*t;
----------------
SELECT COUNT(*) AS t,SUM(score) AS num,name FROM grade GROUP BY name
-->查询结果:
t num name
2 166 李四
3 271 王五
2 156 张三 SELECT COUNT(*) AS t,SUM(score) AS num,class FROM grade GROUP BY class
-->查询结果:
t num class
3 265 数学
1 90 英语
3 238 语文 --方法2
SELECT name,AVG(score) AS sc FROM grade g1 GROUP BY name HAVING AVG(score) > 80;
----------------
SELECT name,AVG(score) AS sc FROM grade AS g1 GROUP BY name HAVING AVG(score) > 80;
-->查询结果:
name sc
李四 83
王五 90

运行结果:

结果1:

结果2:

结果3:

结果4:

以上整理,如有错误之处或有更好的方法,请看到朋友不吝指正,谢谢!

参考文章:

http://www.cnblogs.com/praglody/p/6854181.html?utm_source=itdadao&utm_medium=referral

http://huihai.iteye.com/blog/900844

T-SQL - 习题01_查询每门课都大于80分的学生姓名的更多相关文章

  1. SQL查询出每门课都大于80 分的学生姓名

    Course表如下: 查询出每门课都大于80 分的学生姓名有两种方法. 1.select  distinct name from Course where name not in (select di ...

  2. 用一条SQL语句查出每门课都大于80分的学生的姓名

    用一条SQL语句查出每门课都大于80分的学生的姓名,数据表结构如下: 建表SQL如下: ; -- ---------------------------- -- Table structure for ...

  3. 案例2:用一条SQL查询出数学语文成绩都大于80分的学生姓名?

    方法1: 查出科目成绩有小于80分的学生姓名,再约束并去重学生不等于查出来的姓名 select distinct A.name from t_score A where A.name not in(s ...

  4. [关于SQL]查询成绩都大于80分的学生

    1.用一条SQL语句 查询出每门课都大于80分的学生姓名name kecheng fenshu张三 语文 81张三 数学 75李四 语文 76李四 数学 90王五 语文 81王五 数学 100王五 英 ...

  5. 一个SQL查询出每门课程的成绩都大于80的学生姓名

    name   kecheng    fenshu 张三     语文     81 张三     数学     75 李四     语文     76 李四     数学     90 王五     ...

  6. SQL Server(四)——查询练习(45道习题)

    题目:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1 ...

  7. SQL Server(四)——查询练习(45道习题)转

    题目:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1 ...

  8. (企业面试部分)超详细思路讲解SQL语句的查询实现,及数据的创建。

    企业面试部分详细的SQL问题,思路讲解 第一步:创建数据库表,及插入数据信息 --Student(S#,Sname,Sage,Ssex) 学生表 CREATE TABLE student( sno ) ...

  9. 数据库SQL语句中 查询选修了全部课程的学生的学号和姓名

    一.SQL语言查询选修了全部课程的学生的学号和姓名. 两种解决途径: 第一种: 我们可以表示为在SC表中某个学生选修的课程数等于C表中课程总数.相应的SQL语言如下: select S#,SNAME ...

随机推荐

  1. 忘记Apple ID密码,如何从iPhone/iPad上移除iCloud账号

    忘记Apple ID密码?不用担心!在本文中,我们将分享3种有效方法,即使您不知道密码,也可以轻松移除iPhone或iPad设备上的iCloud账号. 注意:移除iCloud 账号前请备份数据 在开始 ...

  2. Guava - Map

    创建Map 通常在创建map时使用new HashMap<>();的方法,guava提供了一个简洁的方法 Maps.newHashMap(); List转换Map List<Solu ...

  3. P6106 [Ynoi2010] Self Adjusting Top Tree

    P6106 [Ynoi2010] Self Adjusting Top Tree 题意 给出平面直角坐标系上若干不与坐标轴平行的处于第一象限的互不相交的线段,多次询问平面中一个第一象限的矩形与这些线段 ...

  4. 为什么要配置java环境变量

    Java环境变量,真的还有必要配吗? 作为年龄上堪称老鸟而技术上却是菜鸟的老菜鸟,为了祖国的编程事业,不惜拿出一个月工资,淘了一台配置稍高的二手笔记本,打算与老笔记本中的撸啊撸片彻底说再见,誓要在新机 ...

  5. C语言学习(三)

    一.数组.循环.判断条件   #include<stdio.h> int main(){ int a =100; int b =200; int i; int arr [5]; if (a ...

  6. redis的单线程

    一.redis为什么这么快 1.完全基于内存,绝大部分请求是纯粹的内存操作,非常快速.数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1):2.数据结构简单 ...

  7. video标签的视频全屏

    按钮: <div class="fullScreen" @click="fullScreen"><i class="el-icon- ...

  8. Genymotion模拟器安装ARM架构编译应用失败解决方案

    我们在安装一些应用到Genymotion模拟器会提示:adb: failed to install xx.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: ...

  9. http笔记随笔

    1.HTTP (HyperText Transfer Protocol)超文本传输协议(80端口) 1.规定浏览器和服务器之间相互通信的规则 2.万维网交换信息的基础 3.允许将HTML文档从Web服 ...

  10. 9419页最新一线互联网Android面试题解析大全

    网上高级工程师面试相关文章鱼龙混杂,要么一堆内容,要么内容质量太浅, 鉴于此我整理了如下安卓开发高级工程师面试题以及答案帮助大家顺利进阶,下面进入正题: 一.Android相关 1.Activity ...