조건에 min값 구하기 0 6 1,759

by 쌈장묵자 [SQL Query] [2016.04.11 10:24:11]


no 학교 징계 징계별비고
11 기안초 정학10일 3
11 기안초 퇴학 2
11 기안초 벌금10만원 4
22 기안중 정학5일 3

 

ㅇㅣ런식의 데이터가 있다고 할때

no 학교 징계 징계별비고
11 기안초 퇴학 2
22 기안중 정학5일 3

이런식으로 데이터를 뽑고 싶습니다 no별로 그 징계중 제일 심한 징계만 뽑고 싶다고 할때 

징계별 비고 값이 낮을수록 벌의 강도가 높은것입니다.

no별 where 에 min(징계별비교) 즉 제일 적은값을 뽑아내면 될꺼 같은데 어떻게 쿼리를 짜야 할지 모르겠네요;;

도움부탁드립니다

by 신이만든짝퉁 [2016.04.11 10:51:32]
SELECT *
  FROM (SELECT NO, 학교, 징계, 징계별비고
            , DENSE_RANK() OVER(PARTITION BY NO ORDER BY 징계별비고 ASC) RK
          FROM 테이블)
 WHERE RK = 1;


 


by 마농 [2016.04.11 11:00:36]

그냥 RANK 해도 됩니다. ^^


by 쌈장묵자 [2016.04.11 13:25:32]

감사 합니다 ㅎㅎ 참 rank함수가 왜 안떠오르는 걸까요 실무에 적용 할때는;;

 


by 마농 [2016.04.11 11:05:31]

문제는 동일한 가중치를 갖는 징계가 2건 이상인 경우
어떻게 자료를 뽑을 것인지 결정하는 것이죠.
중복 값 모두 뽑아도 되면 RANK 그대로 쓰면 되구요.
1개만 뽑아야 한다면 ROW_NUMBER 로 바꿔야 하는데.
이때 정렬기준을 그대로 쓰면 안되고, 정렬기준을 추가해야만 합니다.
추가하는 정렬기준은 유일성을 보장하는 값이어야만 합니다.


by 쌈장묵자 [2016.04.11 13:25:09]

아 가중치는 유일값으로 바꿔 주던지 해야겠네요 아 rank함수를 알고 있는데 실상 실무에 적용을 할려니 떠오르지 않네요;; 이게 경험이겠죠 ㅎㅎ;; 답변 감사드립니다


by 마농 [2016.04.11 13:33:33]

가중치를 유일하게 하란 의미가 아닌데요?
예를 들면 가중치 3인 정학을 여러번 당한 학생이 있다면?
가중치 외에 정학일수가 더 많은 건을 가져온다던가...
정학일수마저도 같은 경우? 정학일자가 최근인 경우를 가져온다...
등의 명확한 세부 기준이 추가되어야만 합니다.

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