• 时间: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

最新文章

  1. phpcms调用一个指定的栏目的url和栏目名称
  2. 第15章 设备无关位图_15.3 DIB和DDB的结合
  3. salt基本原理
  4. Hadoop on Yarn 各组件详细原理
  5. 关于mysql备份说明
  6. sqlserver 行转列 语文,数学,物理,化学
  7. qsort/bsearch的应用
  8. ###《Effective STL》--Chapter3
  9. 基于zepto的手机焦点图touchstart touchmove
  10. Hopcroft-Karp算法模版
  11. linux 远程操作(expect)
  12. ssh 设置私钥实现两台linux主机无密码访问
  13. Entry
  14. 分享自己写的一个.net方法缓存源码
  15. 使用vue-awesome-swiper的相关问题
  16. 第46章 发现端点(Discovery Endpoint) - Identity Server 4 中文文档(v1.0.0)
  17. 获取上一页面url
  18. Python 递归的练习
  19. .netcore使用vscode多项目调试
  20. Apache Ignite 学习笔记(四): Ignite缓存冗余备份策略

热门文章

  1. synchronized锁定类方法、volatile关键字及其他(八)
  2. vue-cli 3.0脚手架创建vue项目
  3. 使用Elastic Job的时候报“Job conflict with register center”,如何处理?
  4. 在nodejs中利用 Proxy监听对象值的获取
  5. 【Android面试查漏补缺】之事件分发机制详解
  6. 606页Android最新面试题含答案,助力成为offer收割机
  7. zookeeper查看启动状态报错:Error contacting service. It is probably not running.
  8. Create Virtual Network with VirtualBox on Mint 14
  9. VRRP协议原理与配置
  10. eclipse选中参数高亮显示设置