由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 如何在将学生成绩排序后,再加一个rank域
相关主题
给大家贡献一个fb面试的sql问题MS SQL Group By Question
请教高手,包子谢求解释
1. Oracle vs. SQL92 Re: JustSQL求助:两个表各自求Count
请教oracle select top 10 from ... order by descplease help with this left join question
MySQL语句请教这个问题可以用SQL 实现吗?
难。想了一天了。大牛请进。Help about a SQL statement
aks a simple SQL question请教一个SQL Query
急问一个关于T-SQL的问题,谢谢To get the 2nd, 3rd, 4th largest value
相关话题的讨论汇总
话题: class话题: student话题: 成绩话题: rank话题: select
进入Database版参与讨论
1 (共1页)
t**********s
发帖数: 930
1
我有一个学生学号,班号,和成绩的表,现在我想写个MySql的 query,首先将班号排序,其
次在同班内将成绩排序,最后想加个rank域,将同班内成绩的ranking写出来.
前两个好办,用ORDER BY 就行,第三个要求怎么完成呢?
谢谢!
t*****g
发帖数: 1275
2
SELECT t1.id_student, t1.id_class, t1.grade,
(SELECT count(*) + 1 from mytalbe t2 WHERE t2.id_class = t1.id_class and t2
.grade > t1.grade)
FROM mytable t1 order by t1.id_class, t1.grade desc;

【在 t**********s 的大作中提到】
: 我有一个学生学号,班号,和成绩的表,现在我想写个MySql的 query,首先将班号排序,其
: 次在同班内将成绩排序,最后想加个rank域,将同班内成绩的ranking写出来.
: 前两个好办,用ORDER BY 就行,第三个要求怎么完成呢?
: 谢谢!

t**********s
发帖数: 930
3
谢谢!
我又加了相同成绩并列名次的处理.
SELECT S.ID_STUDENT, S.ID_CLASS,S.GRADE, COUNT(*) AS RANK FROM STUDENTS AS S
LEFT OUTER JOIN STUDENTS AS S1 ON S.ID_CLASS = S1.ID_CLASS AND (((S.GRADE =
S1.GRADE) AND (S.ID_STUDENT=S1.ID_STUDENT)) OR (S.GRADE < S1.GRADE) ) GROUP
by S.ID_CLASS, S.GRADE DESC, S.ID_STUDENT;

t2

【在 t*****g 的大作中提到】
: SELECT t1.id_student, t1.id_class, t1.grade,
: (SELECT count(*) + 1 from mytalbe t2 WHERE t2.id_class = t1.id_class and t2
: .grade > t1.grade)
: FROM mytable t1 order by t1.id_class, t1.grade desc;

t*****g
发帖数: 1275
4
How does this work?

S
GROUP

【在 t**********s 的大作中提到】
: 谢谢!
: 我又加了相同成绩并列名次的处理.
: SELECT S.ID_STUDENT, S.ID_CLASS,S.GRADE, COUNT(*) AS RANK FROM STUDENTS AS S
: LEFT OUTER JOIN STUDENTS AS S1 ON S.ID_CLASS = S1.ID_CLASS AND (((S.GRADE =
: S1.GRADE) AND (S.ID_STUDENT=S1.ID_STUDENT)) OR (S.GRADE < S1.GRADE) ) GROUP
: by S.ID_CLASS, S.GRADE DESC, S.ID_STUDENT;
:
: t2

t**********s
发帖数: 930
5
注意LEFT OUTER JOIN 的条件.每个tuple的grade只和比它大或相等的grade结合.
于是第一名的成绩只和它自己结合,第二名的成绩和它自己并和比它高的第一名成绩结
合.
越后的成绩结合的次数越多,正好和它的rank相等.用COUNT和GROUP BY就能算出名次.

【在 t*****g 的大作中提到】
: How does this work?
:
: S
: GROUP

t*****g
发帖数: 1275
6
I'm still lost :) Were you able to run your query against a real database
and get the result you want?

【在 t**********s 的大作中提到】
: 注意LEFT OUTER JOIN 的条件.每个tuple的grade只和比它大或相等的grade结合.
: 于是第一名的成绩只和它自己结合,第二名的成绩和它自己并和比它高的第一名成绩结
: 合.
: 越后的成绩结合的次数越多,正好和它的rank相等.用COUNT和GROUP BY就能算出名次.

t**********s
发帖数: 930
7
Yes. It worked in my sql.
我参考的是这个link:
http://www.xaprb.com/blog/2005/09/27/simulating-the-sql-row_number-function/

【在 t*****g 的大作中提到】
: I'm still lost :) Were you able to run your query against a real database
: and get the result you want?

c***r
发帖数: 65
8
select ......,row_number() over (partition by 班号 order by 成绩 desc) as
rank from xxx
f********t
发帖数: 74
9
It depends on what database you work on. The last post should be good
example in teradata. I do not think it is ansi standard, but I might be
wrong.
1 (共1页)
进入Database版参与讨论
相关主题
To get the 2nd, 3rd, 4th largest valueMySQL语句请教
请问sql这个querry怎么写难。想了一天了。大牛请进。
请问T-SQL中Group By之后怎么找到特定的recordaks a simple SQL question
how to write this query急问一个关于T-SQL的问题,谢谢
给大家贡献一个fb面试的sql问题MS SQL Group By Question
请教高手,包子谢求解释
1. Oracle vs. SQL92 Re: JustSQL求助:两个表各自求Count
请教oracle select top 10 from ... order by descplease help with this left join question
相关话题的讨论汇总
话题: class话题: student话题: 成绩话题: rank话题: select