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

 

이게 제일 효율적인 방법이 맞을까 매번 쿼리문 짤 때마다 의문이지만 일단 돌아가면 됐다.