求一SQL写法

wglnpc 2006-11-08 05:08:55
SID SNAME CID CNAME GRADE TID TNAME
S3 王五 K4 政治 53 T4 赵老师
S1 张三 K1 数学 61 T1 张老师
S2 李四 K3 英语 88 T3 李老师
S1 张三 K4 政治 77 T4 赵老师
S2 李四 K4 政治 67 T5 周老师
S3 王五 K2 语文 90 T2 王老师
S3 王五 K1 数学 55 T1 张老师
S1 张三 K2 语文 81 T2 王老师
S4 赵六 K2 语文 59 T1 王老师
S1 张三 K3 英语 37 T3 李老师
S2 李四 K1 数学 81 T1 张老师
如上有一表TABLE1
要求查询出学生平均成绩及其名次,并列的下一名后推一名.
关于名次如何查出呢?
...全文
249 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
malligator 2006-11-09
  • 打赏
  • 举报
回复
呵呵
倒是我在较真了!

受教了,谢谢!
小李木耳 2006-11-08
  • 打赏
  • 举报
回复
to:malligator(大螟)
不是跟你较真,从问题出发,可能我的方式有些直接了。

1、如要求如下:
-------------------------------->
LZ是要求1,2,3,3,5这样的排名吧?
符合??3,3,5!?
--------------------------------<
可以把我写的最后一个sql改一下:

DENSE_RANK() OVER(ORDER BY a.平均分 DESC) AS as 名次
--->
RANK() OVER(ORDER BY a.平均分 DESC) AS 名次

2、缺考的情况就由楼主自己解决了。
malligator 2006-11-08
  • 打赏
  • 举报
回复
还有,关于你“平均分!=avg(单科分数) ”的疑问:

看table1是怎么记的了——缺考也记上NULL或0 了呢?
malligator 2006-11-08
  • 打赏
  • 举报
回复
对你的解提出疑问:
LZ是要求1,2,3,3,5这样的排名吧?
符合??3,3,5!?

没装数据库,不解
malligator 2006-11-08
  • 打赏
  • 举报
回复
呵呵
这不是重点,不必较真吧

我还写错了呢

主要是解决楼主的问题呀
小李木耳 2006-11-08
  • 打赏
  • 举报
回复
各位:平均分=(按照名字区分) 每个人总分数/科目数
好像不等于avg(单科分数) 吧?
小李木耳 2006-11-08
  • 打赏
  • 举报
回复
追加相同排名功能:
selcet DENSE_RANK() OVER(ORDER BY a.平均分 DESC) AS as 名次,
a.姓名,
a.平均分
from (
selcet SNAME as 姓名,
sum(GRADE)/(selcet sum(count(*)) cid_cot from TABLE1 group by CID) as 平均分
from TABLE1
group by SNAME
) a
order by a.平均分 desc
doer_ljy 2006-11-08
  • 打赏
  • 举报
回复
select sname,grade,rownum from(select sname sname,avg(grade) grade from T1 group by sname) order by sname
小李木耳 2006-11-08
  • 打赏
  • 举报
回复
补足:
子查询为表a
----------------
selcet rownum as 名次,
a.姓名,
a.平均分
from (
selcet SNAME as 姓名,
sum(GRADE)/(selcet sum(count(*)) cid_cot from TABLE1 group by CID) as 平均分
from TABLE1
group by SNAME
) a
order by a.平均分 desc
malligator 2006-11-08
  • 打赏
  • 举报
回复
并列一个还好办

并列n名我就不知道了
:(

等高手
小李木耳 2006-11-08
  • 打赏
  • 举报
回复
试试:

selcet rownum as 名次,
a.姓名,
a.平均分
from (
selcet SNAME as 姓名,
sum(GRADE)/(selcet sum(count(*)) cid_cot from TABLE1 group by CID) as 平均分
from TABLE1
group by SNAME

order by a.平均分 desc

wglnpc 2006-11-08
  • 打赏
  • 举报
回复
并列的解决不了
malligator 2006-11-08
  • 打赏
  • 举报
回复
汗!
没考虑并列排名

再想想
malligator 2006-11-08
  • 打赏
  • 举报
回复
select rownum as MingCi,sid, sname, avg(grade)
from table1
group by sid
order by avg(grade) desc

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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