2013-07-26 3 views
3

모두 괜찮을 것입니다. 이런 문제가 있습니다. 한 학생이 시험에 응시했습니다. 이제 가장 높은 점수를 얻는 상위 3 순위 홀더를 선택하고 싶습니다. 1백마르크을 getiing 두 학생이있을 경우 지금 상황이 한 98 표를 얻는 99 마크 1을 받고있다 ..한다는 것입니다, 다음 찍어요 내가이 네 가지를 얻을 수있는 방법 상위 3 개 위치단일 쿼리에서 데이터를 선택하는 방법은 무엇입니까?

Student1 = 100 marks at first position 
Student2 = 100 marks at first position 
Student3 = 99 marks at second position 
Student4 = 98 marks at thirs position 

을에 4 명의 학생은 내가 MonthlyPremium 내림차순으로 보험 계약자 순서에서 쿼리 선택 상위 3 MonthlyPremium를 사용하는 경우 처음 세 자리 학생들은 는 다음 3 행이 어떤 몸이 모든 학생을 선택하는 나에게 올바른 쿼리를 말할 수

Student1 = 100 marks (who is at first position) 
Student2 = 100 marks (who is at first position) 
Student3 = 99 marks (who is at second position) 
while the student4 = 98 at third poistion is missing. 

을 즉 최고 reurns. 감사

+0

어떤 RDBMS를 사용하고 있습니까? – Strawberry

+0

SqlServer를 사용하고 있습니다 ..... –

+1

다른 포럼의 질문을 모두 복사하는 이유는 무엇입니까? http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=82627? –

답변

5
Select Student,Marks,Rank from (
Select Student, 
     Marks, 
     Dense_Rank() Over(Order by Marks Desc) as Rank from TableName 
    )t 
    where t.Rank<4 
0

이 같은보십시오 뭔가 (내가 SQL의 정확성에 대해 확실하지 오전) :이 쿼리는 3 위에 마크를 받아 학생들을 걸리는 시간보다 만이

0
CREATE TABLE BookTitle (
Id INT NOT NULL, 
NAME VARCHAR(60) NULL, 
Marks INT null 
) 
INSERT INTO BookTitle VALUES (1,'s',100) ,(2,'d',100) ,(3,'e',99),(4,'f',98) 

SELECT B.* FROM BookTitle B WHERE 3>=(SELECT COUNT(DISTINCT (A.Marks)) FROM BookTitle A WHERE A.marks >=B.Marks) 
을 표시

select * from students where students.mark in (select mark from students order by mark DESC LIMIT 3) 

관련 문제