再出一道 SQL 题:

playyuer 2002-08-26 05:02:05
二维表 T(F1,F2,F3,F4,F5,F6,F7) 表示如下关系:
-------------------------------------------------------------
│ 学生ID │ 学生姓名 │ 课程ID │ 课程名称 │ 成绩 │
│ S3 │ 王五 │ K4 │ 政治 │ 53 │
│ S1 │ 张三 │ K1 │ 数学 │ 61 │
│ S2 │ 李四 │ K3 │ 英语 │ 88 │
│ S1 │ 张三 │ K4 │ 政治 │ 77 │
│ S2 │ 李四 │ K4 │ 政治 │ 67 │
│ S3 │ 王五 │ K2 │ 语文 │ 90 │
│ S3 │ 王五 │ K1 │ 数学 │ 55 │
│ S1 │ 张三 │ K2 │ 语文 │ 81 │
│ S4 │ 赵六 │ K2 │ 语文 │ 59 │
│ S1 │ 张三 │ K3 │ 英语 │ 37 │
│ S2 │ 李四 │ K1 │ 数学 │ 81 │
│ .... │ │ │ │ │
│ .... │ │ │ │ │
-------------------------------------------------------------

按平均分从高到低,列印:
名次,学生id,学生姓名,平均成绩
1 , ....
2 , ....
注意: 不考虑并列情况,认为所有人平均分都不相等!
...全文
45 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
frice 2002-08-26
  • 打赏
  • 举报
回复
真是高手如云啊!
playyuer 2002-08-26
  • 打赏
  • 举报
回复
Yang_(扬帆破浪) 不愧是 ★★ !
Chiff 2002-08-26
  • 打赏
  • 举报
回复
playyuer(小干部儿) 我的对吗?
playyuer 2002-08-26
  • 打赏
  • 举报
回复
select count(*)-1,a.学生ID,max(a.学生姓名),max(a.f)
from
(select distinct t.学生ID,t.学生姓名,(select avg(成绩) from t t1 where t1.学生id = t.学生id) as F
from T ) as a,
(select distinct t.学生ID,t.学生姓名,(select avg(成绩) from t t1 where t1.学生id = t.学生id) as F
from T ) as b
where a.f <= b.f
group by a.学生ID
order by count(*)
Chiff 2002-08-26
  • 打赏
  • 举报
回复
select 名次=count(*),min(a.学生ID),min(a.学生姓名),a.平均成绩
from
(select 学生ID,学生姓名,平均成绩=sum(成绩)/count(*)
from 表名 group by 学生ID,学生姓名) as a,
(select 学生ID,学生姓名,平均成绩=sum(成绩)/count(*)
from 表名 group by 学生ID,学生姓名) as b
where a.平均成绩> b.平均成绩
group by a.平均成绩
order by count(*)
Chiff 2002-08-26
  • 打赏
  • 举报
回复
select 名次=count(*),min(a.学生ID),min(a.学生姓名),a.平均成绩
from
(select 学生ID,学生姓名,平均成绩=sum(成绩)/count(*)
from 表名 group by 学生ID,学生姓名) as a,
(select 学生ID,学生姓名,平均成绩=sum(成绩)/count(*)
from 表名 group by 学生ID,学生姓名) as b
where a.平均成绩> b.平均成绩
group by a.平均成绩
coolsky 2002-08-26
  • 打赏
  • 举报
回复
select 学生ID,avg(成绩) as 成绩 from t group by 学生ID order by 成绩
,利用 N_chow(一劍飄香) 的方法加上位此,存到tmp中,读取。
Yang_ 2002-08-26
  • 打赏
  • 举报
回复
playyuer(小干部儿):
你怎么老出这么麻烦的呢?
playyuer 2002-08-26
  • 打赏
  • 举报
回复
要求:
一剑封喉
一针见血
一句搞掂
Yang_ 2002-08-26
  • 打赏
  • 举报
回复
SELECT 1+ISNULL((SELECT COUNT(*) FROM
(
SELECT [學生ID],[学生姓名],AVG([成績]) AS [s成績]
FROM TableName
GROUP BY [學生ID],[学生姓名]
) AS B
WHERE [s成績]>A.[s成績]
),0) AS RANK,
[學生ID],[学生姓名],[s成績]
FROM
(
SELECT [學生ID],[学生姓名],AVG([成績]) AS [s成績]
FROM TableName
GROUP BY [學生ID],[学生姓名]
) AS A
ORDER BY [s成績] DESC
Chiff 2002-08-26
  • 打赏
  • 举报
回复
select AAA.名次,AAA.学生ID,BBB.学生姓名,AAA.平均成绩 from
(
select count(*) as 名次,min(a.学生ID) as 学生ID,a.平均成绩
(select 学生ID,平均成绩=sum(成绩)/count(*) from t) as a,
(select 学生ID,平均成绩=sum(成绩)/count(*) from t) as b,
where a.平均成绩 > b.平均成绩
group by a.平均成绩
) as AAA,
t as BBB
where AAA.学生ID = BBB.学生ID
j9988 2002-08-26
  • 打赏
  • 举报
回复
不考虑缺考的情况.
select
(select count(*) from (
select f1,f2,avg(f5) as f from t group by f1,f2 ) b where f>=a.f ) as 名次,f1 as 学生id,f2 学生姓名,avg(f5) as 平均成绩 from t a group by f1,f2 order by f desc
N_chow 2002-08-26
  • 打赏
  • 举报
回复
呃~~好像不對,總共有几門課程? 是不是每名學生的所有課程的成績都記錄在此表內??
N_chow 2002-08-26
  • 打赏
  • 举报
回复
是 ORDER BY [s成績] DESC
N_chow 2002-08-26
  • 打赏
  • 举报
回复
SELECT Rank=IDENTITY(INT,1,1),[學生ID],AVG([成績]) AS [s成績] INTO #tmp
FROM TableName
GROUP BY [學生ID]
ORDER BY [s成績]

SELECT * FROM #tmp ORDER BY Rank

DROP TABLE #tmp
通过慢sql分析的学习,了解什么是慢sql,以及慢SQL会引起那些性能问。清楚慢sql日志的设置,然后再通过慢sql分析工具的学习,清楚慢sql分析的步骤和流程。慢sql分析工具:mysqldumpslow工具、explain工具、profile工具、Optimizer Trace工具。 提供课程中所使用的sql语句。 课程内容:第一章:课程简介1、课程介绍2、课程大纲 第二章:慢sql简介1、慢sql简介2、慢sql会引起的问 第三章:慢日志的设置1、慢sql的分析流程2、慢日志参数理解3、慢日志参数设置:第1种方式:my.ini文件设置4、慢日志参数设置:第2种方式:sql脚本设置5、慢日志参数设置-效果验证 第四章:如何发现慢sql1、如何发现慢sql:第1种方式:慢日志文件2、如何发现慢sql:第2种方式:mysql库的slow_log表 第五章:慢sql分析工具1、慢sql提取-mysqldumpslow工具-使用方法2、慢sql提取-mysqldumpslow工具-操作实战3、慢sql的执行计划分析-explain分析-执行计划结果说明4、慢sql的执行计划分析-explain分析-索引介绍+type类型举例5、慢sql的资源开销分析-profile分析-分析步骤6、慢sql的资源开销分析-profile分析-show profile执行阶段说明7、慢sql的资源开销分析-profile分析-完整列表说明+操作实战8、慢sql的跟踪分析-Optimizer Trace分析-分析步骤9、慢sql的跟踪分析-Optimizer Trace表的介绍10、索引失效场景举例 第六章:慢日志清理1、慢日志清理

34,590

社区成员

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

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