ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 这个sql语句应该怎么写

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-4-29 09:07 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
姓名身份证号成绩1成绩2地区
A001
95
72
成都
B002
90
91
成都
C003
95
87
成都
D004
81
28
北京
E005
81
35
北京
这样一个数据表,如何用sql语句统计出:按地区的成绩1的最高分对应的姓名和身份证号,如果成绩1的分数相同,就比较成绩2的分数,最高分的人数只能是一个人。这只是一个样例,实际数据表没有这么少。请各位大佬帮忙,谢谢

TA的精华主题

TA的得分主题

发表于 2019-4-29 10:02 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
按地区的成绩1的最高分对应的姓名和身份证号

select top 1 姓名,身份证号 from 表 order by 成绩1 desc


如果 啥的 估计要代码

TA的精华主题

TA的得分主题

发表于 2019-4-29 17:14 | 显示全部楼层
楼主欠缺个条件,成绩1+成绩2结果最大值出现相同的多条记录怎么办,怎么返回?
目前只能按成绩1+成绩2结果最大值唯一来处理: Snipaste_2019-04-29_17-13-52.png

  1. select *
  2. from [data$]  
  3. where (成绩1+成绩2=( select max(成绩1+成绩2) from [data$]))
复制代码




TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-29 17:47 | 显示全部楼层
语虚何以言知 发表于 2019-4-29 17:14
楼主欠缺个条件,成绩1+成绩2结果最大值出现相同的多条记录怎么办,怎么返回?
目前只能按成绩1+成绩2结果 ...

不是按成绩1+成绩2啊,就是按成绩1排序,只是如果成绩1是同分的情况,才看成绩2的分,比如成都只是姓名c才是最高,而不是姓名b

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-29 17:54 | 显示全部楼层
zpy2 发表于 2019-4-29 10:02
按地区的成绩1的最高分对应的姓名和身份证号

select top 1 姓名,身份证号 from 表 order by 成绩1 desc
...

这个只能显示一个地区的人,我这几十个地区。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-29 18:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
语虚何以言知 发表于 2019-4-29 17:14
楼主欠缺个条件,成绩1+成绩2结果最大值出现相同的多条记录怎么办,怎么返回?
目前只能按成绩1+成绩2结果 ...

假设来自同一个地区的2个人,一个A成绩1 100 成绩2 50分, 另一个B成绩1 90, 成绩2 90, 我们认为该地区的最高分的人就是A

TA的精华主题

TA的得分主题

发表于 2019-4-29 20:02 | 显示全部楼层
select b.* from (select a.* from tb a where not exists(select 1 from tb where 地区 = a.地区 and 成绩1 > a.成绩1)) b where not exists(select 1 from (select a.* from tb a where not exists(select 1 from tb where 地区 = a.地区 and 成绩1 > a.成绩1)) where 地区 = b.地区 and 成绩2 > b.成绩2)

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-29 22:10 | 显示全部楼层
marco 发表于 2019-4-29 20:02
select b.* from (select a.* from tb a where not exists(select 1 from tb where 地区 = a.地区 and 成绩 ...

大神,能否解释下什么意思呢?
另外我用实际的数据运行这个sql,直接卡死了。。

TA的精华主题

TA的得分主题

发表于 2019-4-30 12:36 | 显示全部楼层
本帖最后由 语虚何以言知 于 2019-4-30 12:40 编辑
felord 发表于 2019-4-29 17:47
不是按成绩1+成绩2啊,就是按成绩1排序,只是如果成绩1是同分的情况,才看成绩2的分,比如成都只是姓名c ...

1、成绩1最高相同,再取成绩2最高,这个逻辑等同于成绩1+成绩2最高,你觉得不是,请举个反证
2、请看下我3楼回答的截图,h2单元格,我得出的结果是姓名c最高,不是你说的b,这个完全事实错误啊。


看你后来回复,你描述条件还不完整,又提出还需要每个地区的总成绩最高。

请你模拟数据多些样本量,规则完整些,提高解答效率。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-30 12:39 | 显示全部楼层
语虚何以言知 发表于 2019-4-30 12:36
1、成绩1最高相同,再取成绩2最高,这个逻辑等同于成绩1+成绩2最高,你觉得不是,请举个反证
2、请看下 ...

假设来自同一个地区的2个人,一个A成绩1是100分, 成绩2是 50分, 另一个B成绩1 是90, 成绩2是 90, 我们认为该地区的最高分的人就是A,虽然A的成绩1+成绩2 才150分,成绩B总和是180分。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-23 18:52 , Processed in 0.035030 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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