그룹별 합계 구하는 부분 질문 드립니다. 0 1 685

by SQL모험가 [2022.03.07 15:05:10]


A 테이블

WORK_ID WORK_NAME WORK_EMP WORK_DATE WORK_COMMENT
1 정비 1000 20220307 정비 이상없음
2 정비 1000 20220307 정비 이상없음
3 수리 2000 20220307 수리 중 장비 교체

B 테이블

WORK_ID WORK_SEQ_NO WORK_INTERVALTIME WORK_PRIORITY
1 1 10min 1
1 2 15min 2
2 1 30min 1
3 1 40min 1

 

안녕하세요 질문드립니다.

오라클에서 각 그룹별 합계를 구하는데,

A테이블의 WORK_ID에 따른 B그룹의 갯수를 구하려 합니다.

SELECT A.WORK_ID, A.WORK_NAME, COUNT(*) OVER(PARTITION BY B.WORK_ID) AS COUNT

FROM A JOIN B ON A.WORK_ID = B.WORK_ID 

 

하니까 그룹별로 구해지기는 하는데,

WORK_ID WORK_NAME COUNT
1 정비 2
1 정비 2
2 정비 1
3 수리 1

 

이렇게 나옵니다.

원하는 결과물은

WORK_ID WORK_NAME COUNT
1 정비 2
2 정비 1
3 수리 1

 

위와 같이 나왔으면 합니다. PARTITION BY에서 그룹별로 보여주는것 까지는 알겠는데 중복을 제거하는 법을 모르겠습니다 ㅠ

GROUP BY로 해보기는 했지만 PARTITION BY 에서는 어떻게 하는지 질문드립니다.

by 마농 [2022.03.07 15:35:19]

1. 집계 함수가 필요한 곳에 분석함수를 사용하고 있습니다.
- http://gurubee.net/lecture/2671
2. 별칭 사용시 count 와 같은 예약어 사용은 좋지 않습니다.

SELECT a.work_id
     , a.work_name
     , COUNT(*) cnt
  FROM a
 INNER JOIN b
    ON a.work_id = b.work_id
 GROUP BY a.work_id, a.work_name
;

 

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