안녕하세요
현재 이력서 관련 프로그램을 진행중인데요
작업중에 막히는 부분이 있어 조언을 구하고자 합니다.
아래부분은 현재 구현중인 로직입니다.
잘못된 부분에 대해 조언좀 부탁드립니다.
-- 테이블 resume : 이력서 기본정보 resume_eduinfo : 학력정보(여러개) resume_career : 경력정보(여러개) * 검색을 통해 경력중에 마지막 퇴직시의 직급을 검색되게 하고 싶은데요. 아래 처럼 구현을하니 re_car_position이 모두 동일한값으로 나옵니다. 잘못된 부분에 대한 조언좀 부탁드립니다. SELECT x.re_idx , x.re_id -- 회원아이디 , x.re_name -- 회원이름 , x.re_photo -- 회원사진 , x.re_subject -- 이력서제목 , y.re_idx AS eidx , y.re_sch_code -- 학교코드(최종학력) , y.re_sch_edtp -- 졸업여부 , z.re_car_position -- 경력(퇴직시 직급) FROM resume x INNER JOIN (SELECT re_idx, re_id , MAX(re_sch_code) AS re_sch_code , re_sch_edtp FROM resume_eduinfo GROUP BY re_id ) y ON x.re_id = y.re_id INNER JOIN (SELECT re_car_position FROM resume_career WHERE re_car_leave=2 ORDER BY re_car_edt DESC LIMIT 1 ) z ON z.re_id = x.re_id WHERE 1=1 ORDER BY x.re_wdate DESC LIMIT 0, 20
y 부분은 re_id 로 집계하여 1건을 가져오고 있고,
MAX(re_sch_code) 로 최종학력 코드를 가져오고 있기는 하지만,
나머지 항목들(re_idx, re_sch_edtp)은 정확하게 최종것을 가져온다고 할 수 없습니다.
MySQL 에서만 오류가 나지 않는 비표준 그룹바이 구문입니다.
다른 항목들도 최종학력코드에 맞는 값들을 가져오려면
서브쿼리나 셀프조인 등의 방식으로 해당 테이블을 두번 읽어야 합니다.
분석함수가 가능한 최신버전 이라면 row_number 를 이용해 쉽게 구할 수도 있습니다.
최종학력의 경우도 MAX(re_sch_code) 가 최종학력이 맞나요?
re_sch_code 가 학력코드이고 학력에 따라 정렬되어 있다면 맞겠지만?
re_sch_code 가 학교코드라면? 틀린것 같은데요?
최대값을 보고 싶은지? 함계인지? 평균인지? 등
어떻게 집계해서 볼 것인지를 생각해야 합니다.
집계하지 않고 그냥 조회한다는게 말이 안됩니다.
re_id 별로 하나의 값으로 집계하는 구문입니다.
집계하여 하나의 값을 조회해야 하는데
그냥 집계 없이 여러개의 값을 봐야 한다는 거기 때문에 문맥이 맞지 않습니다.
다른 DB 에서는 허용이 되지 않는 오류 구문이고
MySQL 에서는 오류는 나지 않습니다.
집계함수를 사용하지 않았기 때문에 제일 처음 읽은 값 하나가 나오게 됩니나.
즉, 최종학력과 무관한 자료가 출력되게 됩니다.(처음 읽은 값)