programming/Mysql
MySQL 다중 select의 늪...
워아인이
2021. 11. 30. 09:21
21.11.30
SELECT D.CompId, D.총회선수, C.해지해제회선
FROM (SELECT D.CompId, COUNT(D.EntryId) AS '총회선수'
FROM BP_PRODENTRY D
WHERE D.UseFlag = 'Y'
GROUP BY D.CompId
) D
LEFT JOIN
(SELECT C.CompId, COUNT(Case When C.ProgState = 6 then 1 When C.ProgState = 4 then 1 end) as '해지해제회선'
FROM BP_PRODENTRY C
WHERE C.UseFlag = 'Y'
GROUP BY C.CompId
) C
ON D.CompId = C.CompId
WHERE C.해지해제회선 >= D.총회선수
GROUP BY D.CompId
여기까지 하고 보니 Company table의 CompName 까지 가져오고 싶음... (피곤)
이미 총회선수와 해지해제회선수가 같은 경우는 Select 된 값이니 거기에 Right 조인을 걸어보기로 함
SELECT A.CompId, A.CompName, B.총회선수, B.해지해제회선
FROM BP_COMPANY A
RIGHT JOIN(
SELECT D.CompId, D.총회선수, C.해지해제회선
FROM (SELECT D.CompId, COUNT(D.EntryId) AS '총회선수'
FROM BP_PRODENTRY D
WHERE D.UseFlag = 'Y'
GROUP BY D.CompId
) D
LEFT JOIN
(SELECT C.CompId, COUNT(Case When C.ProgState = 6 then 1 When C.ProgState = 4 then 1 end) as '해지해제회선'
FROM BP_PRODENTRY C
WHERE C.UseFlag = 'Y'
GROUP BY C.CompId
) C
ON D.CompId = C.CompId
WHERE C.해지해제회선 >= D.총회선수
GROUP BY D.CompId
) B
ON A.CompId = B.CompId
이게 제일 효율적인 방법이 맞을까 매번 쿼리문 짤 때마다 의문이지만 일단 돌아가면 됐다.