• 时间: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. OpenSUSE Leap 42.1 KDE Ultmate Linux Distribution终极Linux系统试用与SSH连接

    系统安装环境: #一台旧笔记本电脑 #CPU Intel(R) Core(TM) i3 M 380 2.53GHz (4核) #内存 1G #硬盘存储 250G #系统型号 OpenSUSE Leap ...

  2. 使用 Python 翻译 CHM 帮助文档

    此方法绝对切实可行 翻译成品项目: https://github.com/foyoux/InstallShield2020-Documents 效果预览 安装 docts 库 pip install ...

  3. 面试官:你的App卡顿过吗?你是如何监控的?

    一.故事开始 面试官:平时开发中有遇到卡顿问题吗?你一般是如何监控的? 来面试的小伙:额...没有遇到过卡顿问题,我平时写的代码质量比较高,不会出现卡顿. 面试官:... 这回答似乎没啥问题,但是如果 ...

  4. 1day漏洞反推技巧实战(1)

    学习笔记里的存货(1) 以前看了一篇推特老外做赏金猎人的文章,感触有点深,作者没有写相关漏洞分析,只是说了自己挖了多少个漏洞,这里简单的分析下: 1day漏洞在很多时候至关重要,不管是在红蓝对抗,还是 ...

  5. Markdown插入LaTex数学公式

    本文转载自Nautilus_sailing的试试LaTeX插入数学公式,内容有所改动 今天写了一篇随笔,其中需要写几个数学式子,但是我又不想直接将公式做成图片后插入,我觉得很不美观还麻烦.但是我也不会 ...

  6. Android Hello World程序开发过程

    按照Building Your First App,详细过程如下: 安装SDK(如果网速慢,需要用离线安装的方法,见笔记 离线安装Android SDK的方法 ): 采用命令行开发方法(不用装Ecli ...

  7. MVVM窗体show的弹窗事件

    RestMatCutWin restMatCutWindow;//定义一个窗体的全局变量 private void RestMatCutWinExecute() { if (restMatCutWin ...

  8. 给 Arm 生态添把火,腾讯 Kona JDK Arm 架构优化实践

    前言 Arm 架构以其兼具性能与功耗的特点,在智能终端以及嵌入式领域得到了广泛的使用,不断扩大其影响力.而在 PC 端以及数据中心,之前往往是 x86 架构在其中发挥着主要的作用.最近,随着人工智能. ...

  9. win7环境下配置JDK&&安装Weblogic12.2.1.4.0

    win7环境下安装Weblogic12.2.1.4.0 写在前面 最近因为想复现一下weblogic的CVE-2020-2555和CVE-2020-2883漏洞,需要weblogic环境,但是vulh ...

  10. IP实验笔记

    代码: 对LSW1: Vlan 10 Interface ethernet 0/0/1 Port link-type access Port default vlan 10 Interface eth ...