표준 sql에서 select 질문드립니다. 0 8 5,523

by 클론울프 select sql [2014.09.26 10:34:19]


select 시 각 group별 상위 5개의 자료만 가져오게 할려면 어떻게 해야하나요?

예를 들자면 각 학생의 2학년 1학기 성적 중 상위 5개 과목과

2학년 2학기 성적 중 상위 5개 과목을 가져오고 싶습니다.

by 아발란체 [2014.09.26 11:13:05]

SELECT * FROM (
  SELECT
    학년학기, 점수,
    RANK() OVER(PARTITION BY 학년학기 ORDER BY score DESC) AS 학년학기점수순위
  FROM
    테이블명
  GROUP BY
    학년학기, 점수
) WHERE
  학년학기점수순위 <= 5

RANK는 ANSI/ISO 표준, http://wiki.gurubee.net/pages/viewpage.action?pageId=27427796


by 클론울프 [2014.09.26 11:42:30]

rank함수가 표준이었군요...

그렇다면 제가 질문을 잘못했군요.

혹시 SQL lite 3에서는 어떻게 해야될까요?

답변 감사드립니다


by 아발란체 [2014.09.26 13:09:11]

SQLITE는 LIMIT 사용하시면 됩니다.

SELECT * FROM 테이블명 ORDER BY 점수 LIMIT 5


by 클론울프 [2014.09.26 13:14:11]

학생 개인별 상위 5개 점수를 추출하는거라서 이걸로는 해결이 안됩니다 ㅠㅠ

sql lite는 도저히 방법이 없는걸까요?


by DarkBee [2014.09.26 14:07:22]
SELECT a.*
     , ( SELECT COUNT(*) FROM t WHERE 학기 = a.학기 AND 점수 >= a.점수 AND ) rn
  FROM t a


이런형태로 가면 됩니다만 동점 과목에 대해서 처리부분도 필요해보입니다.

 


by 클론울프 [2014.09.26 15:41:50]

Oracle에서는 아래와 같이 하면 되는데 sql lite는 rank()나 row_number()가 없으니

어떻게 처리해야할지 도저히 답이 안나오네요


select * from (
select Name 성명, selescnm 전형구분, examNumber 수험번호, a.SocialNumber 주민번호,
Year 연도, grade 학년, term 학기, Subjectname 과목명, Unit 이수단위,
StudentCount 학생수, OriginalScore 원점수, AvgScore 평균, RankingGrade 등급
,row_number() over (partition by examNumber, term order by term, rankingGrade, unit desc) rnk
from PersonalInfo a, SubjectScore b
where a.mogib1 = b.mogib1 and a.mogib2 = b.mogib2 and a.schoolcode = b.schoolcode
and a.SocialNumber = b.SocialNumber
and b.grade = 2 and RankingGrade <= '9'
) where rnk <=5

 


by 마농 [2014.09.26 15:43:30]
SELECT a.학번, a.학년, a.학기, a.점수
     , COUNT(b.학번) + 1 rk
  FROM t a
  LEFT OUTER JOIN t b
    ON a.학번 = b.학번
   AND a.학년 = b.학년
   AND a.학기 = b.학기
   AND a.점수 < b.점수
 GROUP BY a.학번, a.학년, a.학기, a.점수
 HAVING COUNT(b.학번) + 1 <= 5
;
-- http://www.gurubee.net/lecture/2192

 


by 클론울프 [2014.09.26 16:02:08]

감사합니다. 이런 방법이 있었군요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입