IT/development

[mybatis] 동적 쿼리 집계 쿼리 예시

알 수 없는 사용자 2024. 2. 25. 09:10
반응형

조회구분에 따라 년 또는 월로 그룹핑해서 집계를 구하는 예시

<select id="selectStatus" parameterType="SearchVO" resultType="StatsVO">
	SELECT
    	<!-- 조회 구분에 따른 월 또는 년 -->
    	<choose>
    		<when test="searchGubun == 1">
				DATE_FORMAT(FRST_REG_DT, '%Y') || '년' AS searchMon						/*년*/
			</when>
			<when test="searchGubun == 2">
       			DATE_FORMAT(FRST_REG_DT, '%M') AS searchMon						/* 월 */
			</when>
			<otherwise>
				DATE_FORMAT(FRST_REG_DT, '%M') AS searchMon						/* 월 */
			</otherwise>
		</choose>
		 , COUNT(code) AS searchTotalCnt 									
		 , COUNT(CASE WHEN code = '10' THEN 1 END) AS searchPassedCnt 		
		 , COUNT(CASE WHEN code = '20' THEN 1 END) AS searchRejectedCnt	
      FROM TEST_BOARD
	<!-- 검색 조건 -->
	 <where>
         <!--- 시작일 -->
		 <if test='startDate != null and startDate != ""'>
			   TO_CHAR(FRST_REG_DT, 'YYYY-MM-DD') <![CDATA[ >= ]]> #{startDate}
		</if>
      	<!--- 종료일 -->
		<if test='endDate != null and endDate != ""'>
			AND TO_CHAR(FRST_REG_DT, 'YYYY-MM-DD') <![CDATA[ <= ]]> #{endDate}
		</if>
      	<!-- 시도 -->
      	<if test='ctpvNm != null and ctpvNm != ""'>
			AND CTPV_NM = #{ctpvNm}
		</if>
	 </where>
	<!-- 조회 구분에 따른 그룹화 -->
	 <choose>
		<!-- 년 -->
		<when test="searchGubun == 1">
			GROUP BY DATE_FORMAT(FRST_REG_DT, '%Y')
			ORDER BY DATE_FORMAT(FRST_REG_DT, '%Y')
		</when>
		<!-- 월 -->
		<when test="searchGubun == 2">
			GROUP BY DATE_FORMAT(FRST_REG_DT, '%Y-%m')
			ORDER BY DATE_FORMAT(FRST_REG_DT, '%Y-%m')
		</when>
		<!-- 월 -->
		<otherwise>
			GROUP BY DATE_FORMAT(FRST_REG_DT, '%Y-%m')
			ORDER BY DATE_FORMAT(FRST_REG_DT, '%Y-%m')
		</otherwise>
	 </choose>
</select>

 

반응형