求一个SQL语句,如何获得每个班的分数第二名的姓名

jane0228 2008-11-28 05:39:42
成绩表 A :学号(Number)<主键>、成绩(Score)
学生表 B: 学号(Number)<主键>、姓名(Name)、班级(Class)
求出每个班的分数第二名的姓名。
...全文
1178 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jane0228 2008-11-30
  • 打赏
  • 举报
回复
第一次发贴,谢谢大家的帮忙了哈~
jimoshatan 2008-11-29
  • 打赏
  • 举报
回复
CREATE TABLE #A (S_NO VARCHAR(10),S_NUM INT)
INSERT INTO #A SELECT 101,80
INSERT INTO #A SELECT 102,65
INSERT INTO #A SELECT 103,80
INSERT INTO #A SELECT 104,75
INSERT INTO #A SELECT 105,95
INSERT INTO #A SELECT 106,88
INSERT INTO #A SELECT 107,90

CREATE TABLE #B (S_NO VARCHAR(10),S_NAME VARCHAR(10),S_CLASS VARCHAR(10))
INSERT INTO #B SELECT 101,'A','A01'
INSERT INTO #B SELECT 102,'B','A01'
INSERT INTO #B SELECT 103,'C','A01'
INSERT INTO #B SELECT 104,'D','A02'
INSERT INTO #B SELECT 105,'E','A02'
INSERT INTO #B SELECT 106,'F','A02'
INSERT INTO #B SELECT 107,'G','A01'


SELECT A.S_NO,B.S_NAME,B.S_CLASS,A.S_NUM INTO #C FROM #A A LEFT JOIN #B B ON A.S_NO=B.S_NO

SELECT *
FROM #C A
WHERE (SELECT COUNT(DISTINCT S_NUM) FROM #C WHERE S_CLASS=A.S_CLASS AND S_NUM<A.S_NUM)=1


DROP TABLE #A,#B,#C
ljhcy99 2008-11-28
  • 打赏
  • 举报
回复
select 姓名
from
(
select 姓名,Row_number()over(partition by 班级,学号 order by 成绩) as num
from
(select 学生表.学号 as 学号 ,学生表.班级 as 班级, 学生表.姓名 as 姓名, 成绩表.成绩 as 成绩
from 成绩表,学生表
where 学生表.学号=成绩表.学号 ) as AA ) AS Tab

where num = 2
中国风 2008-11-28
  • 打赏
  • 举报
回复
select
*
from
(select a.Number,b.Name,b.Class,dense_rank()over(partition by b.Class order by a.Score desc) num from A join B on a.Number=b.Number)t
where
num=2


05用rank/dense_rank區分並列排名
s_hluo 2008-11-28
  • 打赏
  • 举报
回复



select Name from B join A on B.Number = A.Number where A.Score = (
select top 1 Score from (select distinct top 2 Score from A order by Score desc) as T order by Score
)
jimoshatan 2008-11-28
  • 打赏
  • 举报
回复
分数有相同的时候,全部出来。没有相同的就出一条
jimoshatan 2008-11-28
  • 打赏
  • 举报
回复
CREATE TABLE #A (S_NO VARCHAR(10),S_NUM INT)
INSERT INTO #A SELECT 101,80
INSERT INTO #A SELECT 102,65
INSERT INTO #A SELECT 103,80
INSERT INTO #A SELECT 104,75
INSERT INTO #A SELECT 105,95
INSERT INTO #A SELECT 106,88
INSERT INTO #A SELECT 107,90

CREATE TABLE #B (S_NO VARCHAR(10),S_NAME VARCHAR(10),S_CLASS VARCHAR(10))
INSERT INTO #B SELECT 101,'A','A01'
INSERT INTO #B SELECT 102,'B','A01'
INSERT INTO #B SELECT 103,'C','A01'
INSERT INTO #B SELECT 104,'D','A02'
INSERT INTO #B SELECT 105,'E','A02'
INSERT INTO #B SELECT 106,'F','A02'
INSERT INTO #B SELECT 107,'G','A01'


SELECT A.S_NO,B.S_NAME,B.S_CLASS,A.S_NUM INTO #C FROM #A A LEFT JOIN #B B ON A.S_NO=B.S_NO

SELECT * FROM #C A
WHERE (SELECT COUNT(*) FROM #C WHERE S_CLASS=A.S_CLASS AND S_NUM>A.S_NUM)<2
AND EXISTS (SELECT 1 FROM #C WHERE S_CLASS=A.S_CLASS AND S_NUM>A.S_NUM )


DROP TABLE #A,#B,#C


/**
S_NO S_NAME S_CLASS S_NUM
---------- ---------- ---------- -----------
101 A A01 80
103 C A01 80
106 F A02 88
-狙击手- 2008-11-28
  • 打赏
  • 举报
回复
select tb.Number,tb.Name,tb.Class,ta.Score
from a as ta
left join b as tb
on ta.Number = tb.Number
where (select count(1) from a,b where a.number = b.number and b.Class= tb.Class and a.Score >=ta.Score) = 2
csdyyr 2008-11-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 csdyyr 的回复:]
引用 3 楼 csdyyr 的回复:
SQL codeselectdistinctnamefromajoinbona.number=b.numberwhereScorein(selecttop2Scorefromawherenumber=b.numberorderbyScoredesc)

SQL codeselectdistinctnamefromajoinbona.number=b.numberwhere(selectcount(distinctScore)fromawherenumber=a.numberandScore>a.Score)=1
[/Quote]

--别名错了
select distinct name
from a as t join b on t.number=b.number
where (select count(distinct Score) from a where number=t.number and Score>t.Score)=1
csdyyr 2008-11-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 csdyyr 的回复:]
SQL codeselectdistinctnamefromajoinbona.number=b.numberwhereScorein(selecttop2Scorefromawherenumber=b.numberorderbyScoredesc)
[/Quote]

select distinct name
from a join b on a.number=b.number
where (select count(distinct Score) from a where number=a.number and Score>a.Score)=1
csdyyr 2008-11-28
  • 打赏
  • 举报
回复

select distinct name
from a join b on a.number=b.number
where Score in (select top 2 Score from a where number=b.number order by Score desc)
zhouxu_hust 2008-11-28
  • 打赏
  • 举报
回复
.....
-狙击手- 2008-11-28
  • 打赏
  • 举报
回复
2005 ?
内容概要:本文档聚焦于基于Peng-Robinson状态方程的化工热力学计算研究,系统介绍了利用Matlab代码实现纯组分及多组分系统的压缩因子(z因子)和逸度系数的计算方法,并进一步拓展至泡点压力与露点压力的数值解。资源涵盖了从状态方程推导、非线性方程根、相平衡条件判断到迭代算法实现的完整技术路线,提供了可运行的Matlab程序代码,有助于深入理解实际工程中物性参数的计算原理与实现过程; 适合人群:具备化工热力学基础知识和一定Matlab编程能力的高校学生、科研人员及工程技术人员,尤其适合从事过程系统模拟、油气田开发、精馏设计及相关领域研究的专业人士; 使用场景及目标:① 掌握Peng-Robinson方程在真实气体物性计算中的应用;② 实现多组分混合体系的相平衡计算与泡/露点预测;③ 为Aspen Plus等商用流程模拟软件提供底层算法验证与教学参考;④ 支持科研论文复现、课程设计、毕业设计及工业过程优化中的热力学数据支撑需; 阅读建议:建议读者结合经典化工热力学教材同步学习,重点理解立方型状态方程的根判别、迭代收敛策略与相平衡准则的数学表达,动手调试并运行所提供的Matlab代码以掌握算法细节,还可将其扩展应用于其他状态方程(如SRK、vdW)的对比分析研究。
内容概要:本文围绕列车-轨道-桥梁交互仿真研究,基于Matlab平台构建数值模型,系统分析列车运行过程中轨道与桥梁结构间的动态相互作用机制。研究涵盖多体动力学建模、耦合系统运动方程解、边界条件设定及仿真结果可视化等关键环节,重点揭示高速行车条件下基础设施的振动传递规律与力学响应特征。该仿真方法可有效评估结构安全性、舒适性指标及疲劳寿命,为轨道交通工程的设计优化与运维管理提供理论支撑和技术路径。文中配套提供了完整的Matlab代码实现方案及操作说明,便于用户复现、验证和拓展相关研究。; 适合人群:具备Matlab编程基础和结构动力学、车辆动力学等相关专业知识的研究生、科研人员及从事铁路工程、桥梁工程与交通系统安全评估的工程技术人才,尤其适合开展轨道交通耦合振动课题的研究者。; 使用场景及目标:①用于高校与科研机构进行列车-轨道-桥梁耦合系统动力学特性的教学演示与科学研究;②支撑高速铁路桥梁的设计优化、运营安全性评估与减振降噪方案验证;③为复杂交通基础设施的多物理场耦合仿真提供建模思路与代码参考。; 阅读建议:建议读者结合所提供的Matlab代码逐模块深入研读,重点关注系统建模假设、质量-刚度-阻尼矩阵构建方法及数值积分算法的实现细节,同时可通过调整参数进行敏感性分析,进一步掌握仿真模型的适用范围与优化方向。

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧