TRUNC ((SELECT SUM(R_SECOND) FROM(SELECT R_SECOND, MIN(Q_KEY) FROM RESULT WHERE 1 = 1 AND PID = P.PID AND J_KEY = P.J_KEY GROUP BY R_SECOND)) / 60) ||'분'|| LPAD(ROUND ( MOD ((SELECT SUM(R_SECOND) FROM(SELECT R_SECOND, MIN(Q_KEY) FROM RESULT WHERE 1 = 1 AND PID = P.PID AND J_KEY = P.J_KEY GROUP BY R_SECOND)), 60 ) ),2,'0') ||'초' AS ATIME INNER JOIN PERSON P ON GS.J_ID = P.PID
db테이블에서 데이터를 가져와서 분초단위로 출력하는 작업을 하는 중입니다.
색칠한 부분의 키값을 inner join 한 테이블에서 가져오고 있습니다.
근데 저 해당 키값을 부적합한 식별자라고 출력되는데 어떤식으로 사용해야되나요?
쿼리 작성 의도가 불분명합니다.
- MIN(Q_KEY) 는 불필요하게 사용되었네요.
- 한번에 SUM(R_SECOND) 하지 않고 GROUP BY R_SECOND 한 후에 SUM(R_SECOND) 한 이유가 뭘까요?
- R_SECOND 의 중복을 제거하려고 한건가요?
- 키값의 중복을 제거하는 경우는 가끔 있을 수 있지만
- 합산해야 하는 값의 중복을 제거하는 경우는 이상한 경우입니다.
전반적으로 쿼리가 의도에 맞게 작성되었을지 의문입니다.
잘못 작성되었을 가능성이 보입니다.
단순하게 에러를 없애는게 다는 아닐것 같습니다.
쿼리 작성 의도가 무었인지 명확하게 설명해 주세요.
SECOND Q_KEY
66 2 66Q1
66 2 66Q2
66 2 66Q3
67 4 67Q1
67 4 67Q2
제가 설명을 잘못드렸네요.
Q_KEY 위 Q뒤에 1~3까지 붙는 항목들이있습니다. Q_KEY에 상관없이 SECOND는 번호값에 따라 번호값들끼리 모두 일치하는 형태라 Q_KEY를 MIN이나 MAX값으로 GROUP BY절을 사용해서 하나로 묶어서 66, 67의 SECOND를 하나씩으로 추려 SUM값을 구하고 싶습니다.
SECOND Q_KEY
66 2 66Q1
67 4 67Q1
원하는 데이터 형태입니다. SECOND(SUM) = 6
모호하네요? ㅎ
별도 항목라는 건지? q_key의 앞번호라는 건지?
q_key 의 앞번호로 생각하겠습니다.
SELECT gs.컬럼들 , p.컬럼들 , FLOOR(s.r_second / 60) ||'분'|| LPAD(MOD(s.r_second, 60), 2, '0') || '초' AS atime FROM ... gs INNER JOIN person p ON gs.j_id = p.pid LEFT OUTER JOIN (SELECT pid, j_key , SUM(r_second) r_second FROM (SELECT DISTINCT pid, j_key, r_second, SUBSTR(q_key, 1, 2) FROM result) GROUP BY pid, j_key ) s ON p.pid = s.pid AND p.j_key = s.j_key ;