- 浏览: 2106983 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1878)
- [网站分类]ASP.NET (141)
- [网站分类]C# (80)
- [随笔分类]NET知识库 (80)
- [随笔分类]摘抄文字[非技术] (3)
- [随笔分类]养生保健 (4)
- [网站分类]读书区 (16)
- [随笔分类]赚钱 (7)
- [网站分类].NET新手区 (233)
- [随笔分类]网站 (75)
- [网站分类]企业信息化其他 (4)
- [网站分类]首页候选区 (34)
- [网站分类]转载区 (12)
- [网站分类]SQL Server (16)
- [网站分类]程序人生 (7)
- [网站分类]WinForm (2)
- [随笔分类]错误集 (12)
- [网站分类]JavaScript (3)
- [随笔分类]小说九鼎记 (69)
- [随笔分类]技术文章 (15)
- [网站分类]求职面试 (3)
- [网站分类]其他技术区 (6)
- [网站分类]非技术区 (10)
- [发布至博客园首页] (5)
- [网站分类]jQuery (6)
- [网站分类].NET精华区 (6)
- [网站分类]Html/Css (10)
- [随笔分类]加速及SEO (10)
- [网站分类]Google开发 (4)
- [随笔分类]旅游备注 (2)
- [网站分类]架构设计 (3)
- [网站分类]Linux (23)
- [随笔分类]重要注册 (3)
- [随笔分类]Linux+PHP (10)
- [网站分类]PHP (11)
- [网站分类]VS2010 (2)
- [网站分类]CLR (1)
- [网站分类]C++ (1)
- [网站分类]ASP.NET MVC (2)
- [网站分类]项目与团队管理 (1)
- [随笔分类]个人总结 (1)
- [随笔分类]问题集 (3)
- [网站分类]代码与软件发布 (1)
- [网站分类]Android开发 (1)
- [网站分类]MySQL (1)
- [网站分类]开源研究 (6)
- ddd (0)
- 好久没写blog了 (0)
- sqlserver (2)
最新评论
-
JamesLiuX:
博主,能组个队么,我是Freelancer新手。
Freelancer.com(原GAF – GetAFreelancer)帐户里的钱如何取出? -
yw10260609:
我认为在混淆前,最好把相关代码备份一下比较好,不然项目完成后, ...
DotFuscator 小记 -
日月葬花魂:
大哥 能 加我个QQ 交流一下嘛 ?51264722 我Q ...
web应用程序和Web网站区别 -
iaimg:
我想问下嵌入delphi写的程序总是出现窗体后面感觉有个主窗体 ...
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部 -
iaimg:
代码地址下不了啊!
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表
24、查询学生平均成绩及其名次
答:SELECT 1+(SELECT COUNT( distinct 平均成绩)
FROM (SELECT S#,AVG(score) AS 平均成绩
FROM SC
GROUP BY S#
) AS T1
WHERE 平均成绩 > T2.平均成绩) as 名次,
S# as 学生学号,平均成绩
FROM (SELECT S#,AVG(score) 平均成绩
FROM SC
GROUP BY S#
) AS T2
ORDER BY 平均成绩 desc;
--------------------------------------------------------------------------------
网上找了一下,没有分析的文章,或许太简单了。那我们自己来分析。这里涉及到一个SELECT 表1.* FROM 表1 where 表1.字段=表2.字段的表遍历匹配的问题(表1、表2是数据库中同一个表或同一个表查询结果的别名)。
但是代码一大堆,看得一头雾水,我们先拆开来,看T1表的查询(先去了COUNT有助于我们的分析)。
view plaincopy to clipboardprint?
SELECT distinct 平均成绩 FROM (SELECT S#,AVG(score) AS 平均成绩
FROM SC GROUP BY S#) T1
SELECT distinct 平均成绩 FROM (SELECT S#,AVG(score) AS 平均成绩
FROM SC GROUP BY S#) T1
图 T1
接着看,T2表的查询。(加入"order by 平均成绩",可以让之后的对比效果更明显)
view plaincopy to clipboardprint?
SELECT S#,AVG(score) 平均成绩 FROM SC GROUP BY S# order by 平均成绩
SELECT S#,AVG(score) 平均成绩 FROM SC GROUP BY S# order by 平均成绩
图 T2
对比T1和T2的SQL查询语句及结果,可以看出,除了distinct的效果以外,其他代码基本上一致。
拆分开来看,是简单的SQL语句,那么联合起来是一种什么效果呢?语句执行的顺序又是什么呢?
我们参照图T1和图T2一步步来描述语句的执行顺序。
view plaincopy to clipboardprint?
循环第一次
for (select @i=1 from T2 order by 平均成绩 desc)
{
//取出 T2.平均成绩 = 87
if(T1.平均成绩 > T2.平均成绩) //即扫一遍T1看下有没有大于87的
{
return count(T1.平均成绩); //返回0个(T1中没有大于87的)
}
}
循环第二次
for (select @i=2 from T2 order by 平均成绩 desc)
{
//取出 T2.平均成绩 = 85
if(T1.平均成绩 > T2.平均成绩) //即扫一遍T1看下有没有大于85的
{
return count(T1.平均成绩); //返回1个(T1中刚好有87,大于T2的85)
}
}
循环第三次
for (select @i=3 from T2 order by 平均成绩 desc)
{
//取出 T2.平均成绩 = 85
if(T1.平均成绩 > T2.平均成绩) //即扫一遍T1看下有没有大于85的
{
return count(T1.平均成绩); //返回1个(T1中刚好有87,大于T2的85)
}
}
循环第四次
for (select @i=4 from T2 order by 平均成绩 desc)
{
//取出 T2.平均成绩 = 83
if(T1.平均成绩 > T2.平均成绩) //即扫一遍T1看下有没有大于85的
{
return count(T1.平均成绩); //返回2个(T1中刚好有87,85,大于T2的83)
}
}
以此类推... 直到遍历匹配完毕。
循环第一次
for (select @i=1 from T2 order by 平均成绩 desc)
{
//取出 T2.平均成绩 = 87
if(T1.平均成绩 > T2.平均成绩) //即扫一遍T1看下有没有大于87的
{
return count(T1.平均成绩); //返回0个(T1中没有大于87的)
}
}
循环第二次
for (select @i=2 from T2 order by 平均成绩 desc)
{
//取出 T2.平均成绩 = 85
if(T1.平均成绩 > T2.平均成绩) //即扫一遍T1看下有没有大于85的
{
return count(T1.平均成绩); //返回1个(T1中刚好有87,大于T2的85)
}
}
循环第三次
for (select @i=3 from T2 order by 平均成绩 desc)
{
//取出 T2.平均成绩 = 85
if(T1.平均成绩 > T2.平均成绩) //即扫一遍T1看下有没有大于85的
{
return count(T1.平均成绩); //返回1个(T1中刚好有87,大于T2的85)
}
}
循环第四次
for (select @i=4 from T2 order by 平均成绩 desc)
{
//取出 T2.平均成绩 = 83
if(T1.平均成绩 > T2.平均成绩) //即扫一遍T1看下有没有大于85的
{
return count(T1.平均成绩); //返回2个(T1中刚好有87,85,大于T2的83)
}
}
以此类推... 直到遍历匹配完毕。
清晰理解了这一点,相信整段SQL代码就不难理解了。完整查询结果如下:
另外需要补充一点的是distinct在这里的使用效果。
需不需要distinct,要看排名的要求方式,要distinct是指顺序排名(如上面的例子,则为1,2,2,3...),不要是指跳序排名(如上面的例子,则为1,2,2,4...)。可见后者其实就是我们日常成绩的排名方式。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/djlzxzy/archive/2009/02/16/3897069.aspx
发表评论
-
你应该知道的10个奇特的 HTML5 单页网站
2013-10-25 21:46 772网页设计师努力寻找新的方式来展现内容。其中一个大的趋势是单页 ... -
用tsmmc.MSC方式在xp和Win7集中管理多台Win2003服务器
2010-12-18 14:08 1294远程桌面管理:tsmmc.msc在xp系统中的使用wind ... -
.Net 4.0并行库实用性演练[1]
2010-12-23 21:21 1160自VS2010发布近半年了,虽然整天想学习新东西,要更新到自己 ... -
Net 4.0并行库实用性演练
2010-12-23 22:03 1038引言 随着CPU多核的普及,编程时充分利用这个特性越显重要。上 ... -
.net 代码混淆原理性实践
2010-11-21 21:53 1639现在我们已经很清楚,托管PE文件可以轻而易举的被反编译,如果您 ... -
ASP.NET中的两个Cookie类:HttpCookie类与Cookie类
2010-07-29 09:43 1880System.Web.HttpCookie类, ... -
去除狂人采集器添加在帖子中的广告信息
2010-06-18 16:28 2169去除狂人采集器添加在帖子中的广告信息 我的网站要转型 ... -
petshop4.0 详解之四(PetShop之ASP.NET缓存)
2010-04-03 09:01 1338如果对微型计算机硬件系统有足够的了解,那么我们对于Cache这 ... -
.NET 开发系统 -知识 点
2010-04-01 09:12 1263安全 性能 调试 Security ... -
织梦部分采集规则-DedeCms
2010-04-01 09:13 8961.幻剑书盟小说采集节点 {dede:comments} ... -
网站静态化结构
2009-12-16 09:21 775写在前头 静态化是解决减轻网站压力,提高网站访问速度的常用方 ... -
Memcache安装
2009-12-16 09:26 768Memcache安装 服务器端下载地址:http:// ... -
memcache_engine + memcachedb = 高性能分布式内存数据库
2009-12-16 09:35 1065memcachedb是一个由新浪网的开发人员开放出来的开源项目 ... -
一个简单的jQuery插件ajaxfileupload实现ajax上传文件例子
2009-12-16 13:10 1524页面代码: <html> <!-- ... -
jQuery Ajax 方法调用 Asp.Net WebService 的详细例子
2009-12-16 13:26 846这很常用,搜索了一下博客园的“找找看”和谷歌,看到大部分都是 ... -
event.keyCode列表
2009-12-16 15:31 1279Keycode对照表 字母和数字键的键码值(keyCo ... -
sql 求差值
2009-12-17 13:15 1120有一组数据,这组数据是不断增加的,想求每小时的差值,规则是:本 ... -
限制文本框只能输入两位数字_我 里面有吗?
2009-12-18 13:44 1094function isTriDecimal(value){ ... -
Resharper进阶一
2009-12-18 15:12 1087Resharper进阶一:简要介绍 面对这样一个问题:为什 ... -
文本框 价格 保留两位小数 讨论
2009-12-21 21:35 1067不知道大家是怎么实现的? 1,用js控制的话,在firefox ...
相关推荐
sql语句 查询同表中学生评价成绩大于80 的人
学生成绩管理系统_数据库设计(内含sql查询语句) (2).pdf学生成绩管理系统_数据库设计(内含sql查询语句) (2).pdf学生成绩管理系统_数据库设计(内含sql查询语句) (2).pdf学生成绩管理系统_数据库设计(内含sql查询语句)...
以下是一些常见的SQL笔试题题目及其解析:查询语句: 题目:请编写一个SQL查询语句,从表"Customers"中选取所有姓为"Smith"的顾客记录。 解析:使用SELECT语句配合WHERE子句进行筛选。 聚合函数: 题目:请编写一个...
学生成绩管理系统 数据库设计(内含sql查询语句).pdf学生成绩管理系统 数据库设计(内含sql查询语句).pdf学生成绩管理系统 数据库设计(内含sql查询语句).pdf学生成绩管理系统 数据库设计(内含sql查询语句).pdf学生成绩...
面试题目:使用java代码实现类似sql语句的分组去重,求平均值,按照平均值从低到高进行输出。
开发工具:eclipse 数据库:mysql 数据库参数配置类:MysqlForm 程序启动主类:MainForm 数据库脚本文件:grade_manage.sql 使用技术:mysql数据库,java数据库技术,swing组件,...按班级,科目及分数段查询学生成绩;
SQL+VB学生成绩管理系统,主要实现成绩的录入,查询,管理
本资源 主要是根据两个表(student)和科目分数表(grade)的sql语句查询,适合目前学习mysql数据库进行练习多表查询的操作。主要是针对三个问题展开的①列出各门课程成绩最好的2位学生,要求显示字段:学号,姓名,科目...
oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是sql性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖oracle sql优化与调优技术,主要内容包括: 第一篇“执行计划...
13. 统计每位学生选修课程的门数、学分及其平均成绩; 14. 统计选修每门课程的学生人数及各门课程的平均成绩; 15. 找出平均成绩在85分以上的学生,结果按系分组,并按平均成绩的升序排列; 16. 查询选修了“1”...
学生成绩管理系统_数据库设计(内含sql查询语句).pdf学生成绩管理系统_数据库设计(内含sql查询语句).pdf学生成绩管理系统_数据库设计(内含sql查询语句).pdf学生成绩管理系统_数据库设计(内含sql查询语句).pdf学生成绩...
Dim 学生成绩管理系统As New 学生信息管理系统 学生成绩管理系统.添加DToolStripMenuItem.Enabled = False 学生成绩管理系统.修改KToolStripMenuItem.Enabled = False 学生成绩管理系统.删除DToolStripMenuItem....
学生成绩管理数据库,SQL serves2012学生表,课程表,成绩表
学生成绩管理系统 java+sql
--3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩 --4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩 --4.1、查询在sc表存在成绩的学生信息的SQL语句。 --4.2、查询在sc表中不...
学生成绩统计:对学生成绩总分,平均分等进行统计。 系统管理员后台用户名为 admin 密码为 www.mycodes.net 普通用户(测试用例)用户名为:user01,密码:111111 DB下为Sql数据库,附加即可 论文下为该程序的论文及...
(2)学生信息的查询,包括查询学生基本信息和成绩。 (3)学生信息的修改,包括修改学生基本信息和成绩。 (4)学生信息的删除,包括修改学生基本信息和成绩。 (5)登录用户密码修改,用户登录到系统可进行相应的...
语言:java+SQL平台:eclipse+Mysql实现功能:连接数据库,实现对学生信息的基本的增删该查功能。
基础查询: 题目:查询员工表(employees)中薪资高于平均薪资的员工信息。 连接: 题目:查询员工表(employees)和部门表(departments)中所有员工的详细信息,包括员工名、部门名称和部门位置。 聚合: 题目:...