ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
123
返回列表 发新帖
楼主: 抹香鲸2009

[求助] 求top10学生各次各科目成绩。

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-13 10:12 | 显示全部楼层
原帖由 wuxiang_123 于 2010-4-13 09:23 发表
回复15楼:
我也觉得文理分科比较好,但现实中,似乎都是不分科比较的。就想我以前念书时,一直都不分开比较。
回复16楼:
没有使用VBA,那个是楼主附件本身有的。
PS:12楼的SQL建立在姓名没有重复上。我觉得, ...


佩服楼上的思路严谨。确实生活中,重名的人很多,何况在上千人的校园里。

TA的精华主题

TA的得分主题

发表于 2010-4-13 13:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
最好不要用姓名,用学号,唯一辨识:
参考 top10各次各科目成绩汇总.rar (89.9 KB, 下载次数: 21)
top10.PNG

  1. select
  2.         a.现班级,
  3.         a.原班级,
  4.         a.姓名,
  5.         a.性别,
  6.         a.类别,
  7.         a.语文,
  8.         a.数学,
  9.         a.英语,
  10.         a.物理,
  11.         a.化学,
  12.         a.生物,
  13.         a.政治,
  14.         a.历史,
  15.         a.地理,
  16.         a.语数英,
  17.         a.综合,
  18.         a.文理总分,
  19.         a.班排,
  20.         a.文理艺排,
  21.         a.场次
  22. from
  23.         (
  24.         select
  25.                 top 10 姓名
  26.         from
  27.                 [历次成绩$]
  28.         where
  29.                 场次="第3次"
  30.         order by
  31.                 文理总分 desc
  32.         )b

  33. left join
  34.         [历次成绩$]a  
  35. on
  36.         b.姓名=a.姓名
复制代码

[ 本帖最后由 masterexcel 于 2010-4-13 14:02 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-13 15:24 | 显示全部楼层
终于见到用左连接解决问题的答案了。开始我以为不能,其实只是我不能。谢谢断轮回的另辟蹊径。

TA的精华主题

TA的得分主题

发表于 2010-4-13 15:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
还是不懂啊

TA的精华主题

TA的得分主题

发表于 2010-4-13 16:51 | 显示全部楼层
用左连接的话,这样更简洁:
  1. SELECT b.* FROM (select TOP 10 *  FROM [历次成绩$] WHERE 场次="第3次" order by 文理总分 DESC)a left join [历次成绩$]b on a.姓名=b.姓名
复制代码
另一种方法:
  1. SELECT a.* FROM [历次成绩$]a,(select TOP 10 *  FROM [历次成绩$] WHERE 场次="第3次" order by 文理总分 DESC)b where a.姓名=b.姓名
复制代码
这两种在SHEET3表中。

top10各次各科目成绩汇总.rar

90.87 KB, 下载次数: 25

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-13 17:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
看了25楼的解答,我都怀疑自己脖子上顶的是不是脑袋。这么多方法,你能信手拈来,而我却一个都想不到,惭愧之极。
不过,对于你12楼的解答,我发现还可以简化一些:去掉一层嵌套
SELECT * FROM [历次成绩$] WHERE 姓名 IN (select TOP 10 姓名  FROM [历次成绩$] WHERE 场次="第3次")

[ 本帖最后由 抹香鲸2009 于 2010-4-13 17:19 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-4-14 08:13 | 显示全部楼层

回复 25楼 wuxiang_123 的帖子

最好不要用"*",在后台需要解析全部的字段,影响速度,而且不利阅读、维护。
尽量避免使用"in",同样对效率有影响。
当然,在本例中,数据量不大的情况下,这两种的差别是较难觉察的。

TA的精华主题

TA的得分主题

发表于 2010-4-14 09:26 | 显示全部楼层

回复 27楼 masterexcel 的帖子

正解。这里只是追求简洁的语句。假如不是用透视表,而是直接用表的话,上面的语句就不符合楼主的要求了。

TA的精华主题

TA的得分主题

发表于 2010-4-14 09:28 | 显示全部楼层
SELECT * FROM [历次成绩$] WHERE 姓名 IN (select TOP 10 姓名  FROM [历次成绩$] WHERE 场次="第3次")
我觉得这样会好些。
SELECT * FROM [历次成绩$] WHERE 姓名 IN (select TOP 10 姓名  FROM [历次成绩$] WHERE 场次="第3次" order by 文理总分 DESC)

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-14 11:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 wuxiang_123 于 2010-4-14 09:28 发表
SELECT * FROM [历次成绩$] WHERE 姓名 IN (select TOP 10 姓名  FROM [历次成绩$] WHERE 场次="第3次")
我觉得这样会好些。
SELECT * FROM [历次成绩$] WHERE 姓名 IN (select TOP 10 姓名  FROM [历次成绩$] WHE ...

同意你的观点,加order by 语句更严谨。但在实际运算中,取top10时,系统默认按照最大值字段(文理总分),自动筛选最大的10位数据。第10名如果没有同分的情况下,从结果上看是一样的。如果第10名有同分现象,只取其中的一位同学。如果筛选字段是单科,那么必须要用order by 引导。

[ 本帖最后由 抹香鲸2009 于 2010-4-14 17:38 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-28 21:44 , Processed in 0.052050 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表