안녕하세요, 선배님들.
MySQL에서 group by가 사용되었을 때,
SELECT 절에 CASE 문이 여러개 포함되어도 상관이 없는지에 대해 여쭈어 보고자 합니다.
우선, 기존의 쿼리는 다음과 같습니다.
SELECT CP.cont_nm ,( SELECT cont_mony FROM CHG_PLN_MGMT WHERE chg_pln_nm = '라이트' AND cont_nm = CP.cont_nm ) AS R_cont_mony ,( SELECT free_coin FROM CHG_PLN_MGMT WHERE chg_pln_nm='라이트' AND cont_nm=CP.cont_nm ) AS R_free_coin ,( SELECT cont_mony FROM CHG_PLN_MGMT WHERE chg_pln_nm='스탠다드' AND cont_nm=CP.cont_nm ) AS S_cont_mony ,( SELECT free_coin FROM CHG_PLN_MGMT WHERE chg_pln_nm='스탠다드' AND cont_nm=CP.cont_nm ) AS S_free_coin ,( SELECT cont_mony FROM CHG_PLN_MGMT WHERE chg_pln_nm='프리미엄' AND cont_nm=CP.cont_nm ) AS P_cont_mony ,( SELECT free_coin FROM CHG_PLN_MGMT WHERE chg_pln_nm='프리미엄' AND cont_nm=CP.cont_nm ) AS P_free_coin ,IF(cont_nm='무약정', 0, IF(cont_nm='1년약정', 1, IF(cont_nm='2년약정', 2, 3)) ) AS orderBy FROM CHG_PLN_MGMT CP GROUP BY cont_nm ORDER BY orderBy;
변경된 쿼리는 다음과 같습니다.
SELECT cont_nm , IFNULL(CASE chg_pln_nm WHEN '라이트' THEN cont_mony END, 0) AS l_cont_mony , IFNULL(CASE chg_pln_nm WHEN '라이트' THEN free_coin END, 0) AS l_free_coin , IFNULL(CASE chg_pln_nm WHEN '스탠다드' THEN cont_mony END, 0) AS s_cont_mony , IFNULL(CASE chg_pln_nm WHEN '스탠다드' THEN free_coin END, 0) AS s_free_coin , IFNULL(CASE chg_pln_nm WHEN '프리미엄' THEN cont_mony END, 0) AS p_cont_mony , IFNULL(CASE chg_pln_nm WHEN '프리미엄' THEN free_coin END, 0) AS p_free_coin FROM CHG_PLN_MGMT WHERE us_yn = 'Y' GROUP BY cont_nm
결과적으로 출력되어야 하는 화면은 이미지를 첨부하였는데요.
무약정, 1년약정, 2년약정, 1년약정 태블릿을 기준으로
라이트, 스탠다드, 프리미엄 요금제를 뽑아주어야 합니다.
현재 변경된 쿼리와 같이 GROUP BY와 함께 CASE문 각각이 사용되어도 문제가 없을까요?
만약, 문제가 된다고 하면 어떠한 방식으로 쿼리를 변경해야 할지 피드백을 주시면 감사하겠습니다!..
날씨가 많이 춥습니다..
감기, 코로나 조심하시기 바랍니다!
감사합니다.