🌳 에러 코드
Mysql - 년도, 월 따로 조회 되는 경우.
🌳 해결 방법
🌾 해결 방법 :
1. 년도별 월별 매출을 yyyy-MM 형식으로 표현하려면 CONCAT 함수를 사용합니다.
2. LPAD는 "Left Pad"의 약자로, 문자열을 특정 길이로 만들기 위해 왼쪽에 다른 문자를 채우는 함수입니다. 일반적으로 숫자나 문자열을 일정한 길이로 맞추는데 사용됩니다.
예를 들어, LPAD('7', 4, '0')은 문자열 '7'을 길이 4로 맞추고 왼쪽에 '0'을 채워서 '0007'을 생성합니다. 여기서 첫 번째 인수는 대상 문자열이고, 두 번째 인수는 목표 길이이며, 세 번째 인수는 채워질 문자입니다.
년도와 월을 표현할 때 년도는 4자리로, 월은 2자리로 표현하는 경우가 많기 때문에 LPAD 함수를 사용하여 월을 2자리로 만들어주는 것이 일반적입니다.
Before
// 월별 매출 최신순
@Query(nativeQuery = true, value = " SELECT YEAR(B.reservationDate) AS `YEAR`,MONTH(B.reservationDate) AS `MONTH`, sum(A.cost) AS `SUM`, COUNT(DISTINCT B.id) AS `patientCount`\n" +
" FROM `reservation` AS B\n" +
" join `treatment_statement` AS A\n" +
" on B.id = A.reservationId\n" +
" join `patient` AS C\n" +
" on B.patientId = C.id\n" +
" where A.doctorId = :doctorId\n" +
" GROUP BY `YEAR`, `MONTH`\n" +
" ORDER BY `YEAR` DESC, `MONTH` DESC;\n")
public List<DoctorMonthInterface> findRecentByDoctorId(
@Param("doctorId") int doctorId);
After
// 월별 매출 최신순
@Query(nativeQuery = true, value = " SELECT CONCAT(YEAR(B.reservationDate), '-', LPAD(MONTH(B.reservationDate), 2, '0')) AS `YEAR_MONTH`, sum(A.cost) AS `SUM`, COUNT(DISTINCT B.id) AS `patientCount`\n" +
" FROM `reservation` AS B\n" +
" join `treatment_statement` AS A\n" +
" on B.id = A.reservationId\n" +
" join `patient` AS C\n" +
" on B.patientId = C.id\n" +
" where A.doctorId = :doctorId\n" +
" GROUP BY `YEAR_MONTH`\n" +
" ORDER BY `YEAR_MONTH` DESC;\n")
public List<DoctorMonthInterface> findRecentByDoctorId(
@Param("doctorId") int doctorId);