안녕하세요
MYSQL 쿼리관련 질문드립니다..
SELECT T.TenantNm, (SELECT COUNT(TS.TsId) FROM tenantStudent TS LEFT JOIN studentresume SR ON SR.TsId = TS.TsId WHERE TS.DelYN = 'N' AND SR.DelYN = 'N' AND SR.SrType = 'E' AND (SR.StartDate <= DATE_FORMAT(CONCAT('2020', '11', '01'), '%Y-%m-%d 00:00:00') OR SR.StartDate <= DATE_FORMAT(LAST_DAY(DATE_FORMAT(CONCAT('2020', '11', '01'), '%Y-%m-%d')), '%Y-%m-%d 23:59:59')) AND (SR.EndDate >= DATE_FORMAT(CONCAT('2020', '11', '01'), '%Y-%m-%d 00:00:00') OR SR.EndDate >= DATE_FORMAT(LAST_DAY(DATE_FORMAT(CONCAT('2020', '11', '01'), '%Y-%m-%d')), '%Y-%m-%d 23:59:59')) AND TS.TenantId = T.TenantId GROUP BY TS.TsId) AS TotalStudents, (SELECT SUM(SA.SaAttend) FROM studentattendance SA WHERE SA.DelYN = 'N' AND SA.SaDate >= DATE_FORMAT(CONCAT('2020', '11', '01'), '%Y-%m-%d 00:00:00') AND SA.SaDate <= DATE_FORMAT(LAST_DAY(DATE_FORMAT(CONCAT('2020', '11', '01'), '%Y-%m-%d')), '%Y-%m-%d 23:59:59') AND SA.TenantId = T.TenantId GROUP BY SA.TenantId) AS TotalAttendance FROM tenant T WHERE T.DelYN = 'N' AND T.TenantStatus = 'Y' GROUP BY T.TenantId
이렇게 할시에
결과값은
TenantNm / TotalStudents / TotalAttendance
A / 4 / 8
B / 2 / 4
C / 0 / 0
D / 5 / 9
이런식으로 나와야하는데
A / NULL / NULL
B / NULL / NULL
C / NULL / NULL
D / NULL / NULL
로 나옵니다.. 선배님들 도와주세요
1. 메인 쿼리의 그룹바이
- TenantId 는 tenant 테이블의 PK 일 것으로 예상됩니다.
- 유일키 값으로 그룹핑 하는 것은 무의미 합니다.
2. 서브 쿼리의 그룹바이
- TenantId 에 해당하는 카운트를 구하는데 난데 없이 TS.TsId 로 그룹핑하네요? 그룹 항목이 이상하고요
- 2번 서브쿼리는 그래도 TenantId 로 그룹핑하긴 하네요.
- 하지만 굳이 그룹바이 안해도 됩니다.
3. OR 조건은 다음과 같이 변경해도 동일한 의미입니다.
- 변경전 : (sdt <= '20201101' OR sdt <= '20201130') AND (edt >= '20201101' OR edt >= '20201130')
- 변경후 : sdt <= '20201130' AND edt >= '20201101'