itn 2023-09-07
배너클릭 성능개선
@9d720302e89d701d8df3cdd9189fee2bf77e914e
src/main/resources/egovframework/sqlmap/let/sym/log/clg/EtcStat_SQL.xml
--- src/main/resources/egovframework/sqlmap/let/sym/log/clg/EtcStat_SQL.xml
+++ src/main/resources/egovframework/sqlmap/let/sym/log/clg/EtcStat_SQL.xml
@@ -5,142 +5,132 @@
 	<typeAlias  alias="etcStatVO" type="itn.let.sym.log.clg.service.EtcStatVO"/>
 	<typeAlias  alias="popSrhVO" type="itn.let.sym.log.clg.service.PopSrhVO"/>	
 
- 
- 	<!-- 일별 문자발송 건수 -->
-	<select id="etcStatDAO.selectBannerClickStatDay" parameterClass="etcStatVO" resultClass="etcStatVO">
-		SELECT COUNT(X1.creatDt) OVER() AS totCnt, 
-		  X1.creatDt as statDate, 
-		  X1.CNT1 AS menuClickCnt, /* 배너위치 페이지 접속 수 */ 
-		  IFNULL (X2.CLICK_A_CNT, 0 ) as bannerClickCnt, /* 배너 클릭수 */ 
-		  ROUND(IFNULL (X2.CLICK_A_CNT, 0 ) / X1.CNT1 * 100, 2 ) AS bannerClickRate /* (배너) 클릭률 */ 
-		FROM 
-		(
-			SELECT creatDt, COUNT(creatDt) AS CNT1
-			FROM   ( SELECT LOG_ID,
-				       (DATE_FORMAT(A.CREAT_DT, '%Y-%m-%d') ) AS creatDt
-			       FROM    lettnloginlog A
-			       WHERE 1=1
-	                <isEqual prepend="AND" property="menuCode" compareValue="01">
-			       /* 메뉴코드 01 : 메인 */	                
-					   <![CDATA[  url = #menuUrl#  ]]>			       
-	                </isEqual>
-	                
-	                <isEqual prepend="AND" property="menuCode" compareValue="02">
-       			       /* 메뉴코드 02 : 로그인 : 로그인 경우 파라미터 붙는 경우 있어서 뒤 문자열 자름  */
-					   <![CDATA[  substr(url, 1,24) = #menuUrl#  ]]>			       
-	                </isEqual>
-	                
-			       ) A1
-			WHERE 1=1
-            <isNotEmpty property="ntceBgnde">
-			<![CDATA[  AND creatDt BETWEEN #ntceBgnde#  AND  #ntceEndde#   ]]>
-			</isNotEmpty>
-			GROUP BY creatDt
-			ORDER BY creatDt DESC
-		
-		) X1 /* 메뉴클릭 정보 */
-		LEFT OUTER JOIN
-		(
-			SELECT STAT_DATE AS creatDt, CLICK_A_CNT from mj_banner_click_stat
-			WHERE 1=1  
-            <isNotEmpty property="ntceBgnde">
-			<![CDATA[  AND STAT_DATE BETWEEN #ntceBgnde#  AND  #ntceEndde#   ]]>
-			</isNotEmpty>			
-			<![CDATA[  AND BANNER_CODE =  #bannerCode#   ]]>			 
-			<![CDATA[  AND MENU_CODE =  #menuCode#   ]]>			
-		) X2  /* 배너 클릭 정보 */
-		ON X1.creatDt = X2.creatDt
-		ORDER BY  X1.creatDt desc		
-		LIMIT  #recordCountPerPage# OFFSET #firstIndex#
-	</select>
- 
 
-<!-- 월별 문자발송 건수 -->
-	<select id="etcStatDAO.selectBannerClickStatMonth" parameterClass="etcStatVO" resultClass="etcStatVO">
-        SELECT 
-       	  COUNT(X1.creatDt) OVER() AS totCnt, 
- 		  X1.creatDt as statDate, 
-		  X1.CNT1 AS menuClickCnt, /* 배너위치 페이지 접속 수 */ 
-		  IFNULL (X2.CLICK_A_CNT, 0 ) as bannerClickCnt, /* 배너 클릭수 */ 
-		  ROUND(IFNULL (X2.CLICK_A_CNT, 0 ) / X1.CNT1 * 100, 2 ) AS bannerClickRate /* (배너) 클릭률 */        	
-       	FROM
-       	(
-        	SELECT creatDt, COUNT(creatDt) AS CNT1 
-        	FROM ( SELECT LOG_ID, (DATE_FORMAT(A.CREAT_DT, '%Y-%m') ) AS creatDt 
-	        		FROM lettnloginlog A
-			         WHERE 1=1
-	                <isEqual prepend="AND" property="menuCode" compareValue="01">
-			       /* 메뉴코드 01 : 메인 */	                
-					   <![CDATA[  url = #menuUrl#  ]]>			       
-	                </isEqual>
-	                
-	                <isEqual prepend="AND" property="menuCode" compareValue="02">
-       			       /* 메뉴코드 02 : 로그인 : 로그인 경우 파라미터 붙는 경우 있어서 뒤 문자열 자름  */
-					   <![CDATA[  substr(url, 1,24) = #menuUrl#  ]]>			       
-	                </isEqual>
- 
-				 	<![CDATA[   AND  (DATE_FORMAT(A.CREAT_DT, '%Y') ) =  #searchYear#   ]]>	 		            
-			) A1
-           WHERE 1=1           
-           GROUP BY  creatDt 
-			) X1
-			LEFT OUTER JOIN
+ 	<!-- 일별 배너클릭 건수 -->
+	<select id="etcStatDAO.selectBannerClickStatDay" parameterClass="etcStatVO" resultClass="etcStatVO">
+		SELECT
+			M2.totCnt
+			, M2.statDate
+			, IFNULL(M2.menuClickCnt, 0) menuClickCnt 
+			, IFNULL(M2.bannerClickCnt, 0) bannerClickCnt 
+			, ROUND(IFNULL(M2.bannerClickCnt, 0) / IFNULL(M2.menuClickCnt, 0) * 100, 2 ) AS bannerClickRate
+		FROM 
+		(	SELECT
+				COUNT(0) OVER() AS totCnt
+				, M.CREAT_DT AS statDate
+				, M.CNT AS menuClickCnt
+				, (
+				  	SELECT CLICK_A_CNT FROM MJ_BANNER_CLICK_STAT S 
+				  	WHERE S.STAT_DATE = M.CREAT_DT
+				  	AND S.BANNER_CODE = #bannerCode#
+					AND S.MENU_CODE = #menuCode#
+				) bannerClickCnt
+			FROM 
 			(
-			 SELECT SUBSTR(STAT_DATE, 1,7) creatDt,   SUM(CLICK_A_CNT) AS CLICK_A_CNT 
-	         from mj_banner_click_stat
-	         WHERE 1=1
-			<![CDATA[   AND SUBSTR(STAT_DATE, 1,4) =  #searchYear#   ]]>			 
-			<![CDATA[  AND BANNER_CODE =  #bannerCode#   ]]>			 
-			<![CDATA[  AND MENU_CODE =  #menuCode#   ]]>			
-   			GROUP BY  SUBSTR(STAT_DATE, 1,7)
-   			) X2
-			ON X1.creatDt = X2.creatDt
-			ORDER BY  X1.creatDt desc	
-			
-		LIMIT  #recordCountPerPage# OFFSET #firstIndex#
+				SELECT 
+					(DATE_FORMAT(A.CREAT_DT, '%Y-%m-%d')) AS CREAT_DT
+					, COUNT(0) CNT 
+				FROM lettnloginlog A
+				WHERE 1=1
+					<isEqual property="menuCode" compareValue="01">
+						AND SUBSTR(URL, 1,21) = #menuUrl#
+					</isEqual>
+					<isEqual property="menuCode" compareValue="02">
+						AND SUBSTR(URL, 1,24) = #menuUrl#
+					</isEqual>
+					<![CDATA[
+					AND A.CREAT_DT >= #ntceBgnde# 
+					AND A.CREAT_DT < DATE_ADD(#ntceEndde#, INTERVAL 1 DAY)
+					]]>
+				GROUP BY DATE_FORMAT(A.CREAT_DT, '%Y-%m-%d')
+				LIMIT  #recordCountPerPage# OFFSET #firstIndex#
+			) M
+		) M2
+		ORDER BY M2.statDate DESC
+	</select>
+
+	<!-- 월별 배너클릭 건수 -->
+	<select id="etcStatDAO.selectBannerClickStatMonth" parameterClass="etcStatVO" resultClass="etcStatVO">
+		SELECT
+			M2.totCnt
+			, M2.statDate
+			, IFNULL(M2.menuClickCnt, 0) menuClickCnt 
+			, IFNULL(M2.bannerClickCnt, 0) bannerClickCnt 
+			, ROUND(IFNULL(M2.bannerClickCnt, 0) / IFNULL(M2.menuClickCnt, 0) * 100, 2 ) AS bannerClickRate
+		FROM 
+		(	SELECT
+				COUNT(0) OVER() AS totCnt
+				, M.CREAT_DT AS statDate
+				, M.CNT AS menuClickCnt
+				, (
+				  	SELECT SUM(CLICK_A_CNT) FROM MJ_BANNER_CLICK_STAT S 
+				  	WHERE DATE_FORMAT(S.STAT_DATE, '%Y-%m') = M.CREAT_DT
+				  	AND S.BANNER_CODE = #bannerCode#
+					AND S.MENU_CODE = #menuCode# 
+				) bannerClickCnt
+			FROM 
+			(
+				SELECT 
+					(DATE_FORMAT(A.CREAT_DT, '%Y-%m')) AS CREAT_DT
+					, COUNT(0) CNT 
+				FROM lettnloginlog A
+				WHERE 1=1
+					<isEqual property="menuCode" compareValue="01">
+						AND SUBSTR(URL, 1,21) = #menuUrl#
+					</isEqual>
+					<isEqual property="menuCode" compareValue="02">
+						AND SUBSTR(URL, 1,24) = #menuUrl#
+					</isEqual> 
+					<![CDATA[
+					AND DATE_FORMAT(A.CREAT_DT, '%Y') = #searchYear#
+					]]>
+				GROUP BY DATE_FORMAT(A.CREAT_DT, '%Y-%m')
+				LIMIT  #recordCountPerPage# OFFSET #firstIndex#
+			) M
+		) M2
+		ORDER BY M2.statDate DESC
 	</select>
   
-<!-- 연별 문자발송 건수 -->
+	<!-- 연별 배너클릭 건수 -->
 	<select id="etcStatDAO.selectBannerClickStatYear" parameterClass="etcStatVO" resultClass="etcStatVO">
-        SELECT 
-       	  COUNT(X1.creatDt) OVER() AS totCnt, 
- 		  X1.creatDt as statDate, 
-		  X1.CNT1 AS menuClickCnt, /* 배너위치 페이지 접속 수 */ 
-		  IFNULL (X2.CLICK_A_CNT, 0 ) as bannerClickCnt, /* 배너 클릭수 */ 
-		  ROUND(IFNULL (X2.CLICK_A_CNT, 0 ) / X1.CNT1 * 100, 2 ) AS bannerClickRate /* (배너) 클릭률 */        	
-       	FROM
-       	(
-        	SELECT creatDt, COUNT(creatDt) AS CNT1 
-        	FROM ( SELECT LOG_ID, (DATE_FORMAT(A.CREAT_DT, '%Y') ) AS creatDt 
-	        		FROM lettnloginlog A
-			         WHERE 1=1
-	                <isEqual prepend="AND" property="menuCode" compareValue="01">
-			      	    /* 메뉴코드 01 : 메인 */	                
-					   <![CDATA[  url = #menuUrl#  ]]>			       
-	                </isEqual>
-	                
-	                <isEqual prepend="AND" property="menuCode" compareValue="02">
-       			       /* 메뉴코드 02 : 로그인 : 로그인 경우 파라미터 붙는 경우 있어서 뒤 문자열 자름  */
-					   <![CDATA[  substr(url, 1,24) = #menuUrl#  ]]>			       
-	                </isEqual>
-    	   <![CDATA[   AND  (DATE_FORMAT(A.CREAT_DT, '%Y') ) =  #searchYear#   ]]>	 		           
-			) A1
-           WHERE 1=1           
-           GROUP BY  creatDt 
-			) X1
-			LEFT OUTER JOIN
+		SELECT
+			M2.totCnt
+			, M2.statDate
+			, IFNULL(M2.menuClickCnt, 0) menuClickCnt 
+			, IFNULL(M2.bannerClickCnt, 0) bannerClickCnt 
+			, ROUND(IFNULL(M2.bannerClickCnt, 0) / IFNULL(M2.menuClickCnt, 0) * 100, 2 ) AS bannerClickRate
+		FROM 
+		(	SELECT
+				COUNT(0) OVER() AS totCnt
+				, M.CREAT_DT AS statDate
+				, M.CNT AS menuClickCnt
+				, (
+				  	SELECT SUM(CLICK_A_CNT) FROM MJ_BANNER_CLICK_STAT S 
+				  	WHERE DATE_FORMAT(S.STAT_DATE, '%Y') = M.CREAT_DT
+				  	AND S.BANNER_CODE = #bannerCode#
+					AND S.MENU_CODE = #menuCode# 
+				) bannerClickCnt
+			FROM 
 			(
-			 SELECT SUBSTR(STAT_DATE, 1,4) creatDt,  SUM(CLICK_A_CNT) AS CLICK_A_CNT
-	         from mj_banner_click_stat
-	         WHERE 1=1
-			<![CDATA[   AND SUBSTR(STAT_DATE, 1,4) =  #searchYear#   ]]>			 
-			<![CDATA[  AND BANNER_CODE =  #bannerCode#   ]]>			 
-			<![CDATA[  AND MENU_CODE =  #menuCode#   ]]>			
-   			GROUP BY  SUBSTR(STAT_DATE, 1,4)
-   			) X2
-			ON X1.creatDt = X2.creatDt
-			ORDER BY  X1.creatDt desc	
-		LIMIT  #recordCountPerPage# OFFSET #firstIndex#
+				SELECT 
+					(DATE_FORMAT(A.CREAT_DT, '%Y')) AS CREAT_DT
+					, COUNT(0) CNT 
+				FROM lettnloginlog A
+				WHERE 1=1
+					<isEqual property="menuCode" compareValue="01">
+						AND SUBSTR(URL, 1,21) = #menuUrl#
+					</isEqual>
+					<isEqual property="menuCode" compareValue="02">
+						AND SUBSTR(URL, 1,24) = #menuUrl#
+					</isEqual> 
+					<![CDATA[
+					AND DATE_FORMAT(A.CREAT_DT, '%Y') = #searchYear#
+					]]>
+				GROUP BY DATE_FORMAT(A.CREAT_DT, '%Y')
+				LIMIT  #recordCountPerPage# OFFSET #firstIndex#
+			) M
+		) M2
+		ORDER BY M2.statDate DESC
 	</select>  
  	
  	
Add a comment
List