쿼리 질문드립니다. 0 6 1,119

by 치비 [2015.11.09 14:28:32]


간단한 평가 TB를 만들어서 공부하는 중에 궁금한게 생겨서 질문 드립니다.

현재 아래와 같은 TB를 만들어서 이것저것 공부하고 있습니다. 1은 합격이며 0은 불합격 인데

현재 select decode(sum(평가결과), 3, 최종합격 , 불합격) , max(시간) from 테이블 where 과목코드 = 01;

요런 문장을 쓰면 과목코드값이 01인 경우 모두 합격이기 때문에 최종합격과/시간 데이터 값을 구할 수 있습니다.

헌데 저가 공부하면서 궁금한게 각 과목코드 마다 최종합격 또는 불합격을 표시하면서 동시에 시간순서대로 나열 하고 싶은데 위에서 보시는 바와 같이 위의 쿼리문은 한개의 데이터만 찾아져서.... 과목코드마다 더한것을 최종합격/불합격으로 나눠서 그것을 각각 비교해서 시간순으로 나타내고 싶은데 혹시 방법이 있을까요??

간단한 방향성만이라도 제시 해주시면 대단히 감사드리겠습니다. 긴글 읽어 주시느라 대단히 감사드립니다^^

과목 평가결과 이름 시간 과목코드
 수학 1(합격) 홍길동 date 01
 과학 1 홍길동1 date 01
 영어 1 홍길동3 date 01
수학 1 철수1 date 02
과학 0(불합격) 철수2 date 02
영어 1 철수3 date 02
수학 1 홍길동1 date 03

 

by 사과짬뽕 [2015.11.09 15:01:56]

group by에 과목코드를 넣고

order by에 시간을 넣어보세요~


by 창조의날개 [2015.11.09 15:27:28]
SELECT 과목코드
     , decode(sum(평가결과), 3, '최종합격' , '불합격') 평가결과
     , MAX(시간) 시간
FROM 테이블
GROUP BY 과목코드
ORDER BY 시간
;

 


by 치비 [2015.11.09 15:43:03]

대단히 감사합니다 전 group by 절을 생각 하지 못했네여;;; 최종결과 열값을 코드별로 group by 절로 묶어서 맥스시간 값을 정열 해야 하는 거였네요 ㅠㅠ 전 group by 해도 생각이 안나서 ㅠ sub쿼리와 with 구문으로 묶어야 하는건줄 이것때문에 어제 오늘 하루종일 구글링 했었는데 ㅎ 역시 초보라서 아직은 응용이 잘 안되네여 ㅎ  


by 마농 [2015.11.09 16:00:01]

ORDER BY 구문 사용시 주의사항입니다.
MAX(시간) 에 대한 Alias 를 컬럼명과 동일한 "시간" 으로 지정했을 때
ORDER BY MAX(시간) 에서의 시간은 컬럼명 시간이 아닌 알리아스 시간으로 인식됩니다.
따라서 해당 구문은 오류가 발생됩니다.
 1. ORDER BY MAX(시간) -- 오류발생
 2. ORDER BY 시간 -- 알리아스를 이용한 정렬
 3. ORDER BY MAX(테이블.시간) -- 컬럼명을 이용한 정렬
1번 구문이 아닌 2,3번 구문으로 변경해야 합니다.


by 치비 [2015.11.09 16:23:28]

아 예명으로 지정한 열값을 order by 구문에 넣어야 하는 거군요 대단히 감사합니다.

프로그램  게시판 소스 만들면서  처음 DB를 접했는데 

정말 저가 원하는 데이터를 쿼리문으로 만들어서 분류하는게 재밌네여 ㅎㅎ

전문가는 수백만명이 가입하는 사이트의 DB관리를 하는걸 이런 방법으로 한다는게 대단한것 같습니다.

좋은 정보 감사합니다.


by 창조의날개 [2015.11.10 11:28:22]

역시 마농님 세심한 부분까지 잡아주시는군요..

 

실제 쿼리 실행 안해보고 하니 이런 실수를 하네요..

실제 쿼리 실행하면 에러 나겠네요..

쿼리는 수정했습니다.

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