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 에서는 어떻게 하는지 질문드립니다.
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 ;