swkim преди 4 години
родител
ревизия
f1dff69e9c

+ 118 - 0
산출물/3.설계/ERD/.metadata/.log

@@ -7195,3 +7195,121 @@ Command-line arguments:  -os win32 -ws win32 -arch x86 D:\WIDE\workspace\webapps
 
 !ENTRY org.eclipse.osgi 2 1 2021-09-07 17:43:38.087
 !MESSAGE NLS unused message: ToggleColumnVisibilityHandler_5 in: com.tomato.exerd.handler.messages
+!SESSION 2021-09-17 14:55:05.578 -----------------------------------------------
+eclipse.buildId=M20090211-1700
+java.version=1.6.0_24
+java.vendor=Sun Microsystems Inc.
+BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=ko_KR
+Framework arguments:  D:\WIDE\workspace\webapps\style24\style24.doc\산출물\3.설계\ERD\ST24.exerd
+Command-line arguments:  -os win32 -ws win32 -arch x86 D:\WIDE\workspace\webapps\style24\style24.doc\산출물\3.설계\ERD\ST24.exerd
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:06.819
+!MESSAGE NLS unused message: OpenResourceDialog_openButton_text in: org.eclipse.ui.internal.ide.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:06.820
+!MESSAGE NLS unused message: OpenResourceDialog_openWithMenu_label in: org.eclipse.ui.internal.ide.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:06.821
+!MESSAGE NLS unused message: OpenResourceDialog_openWithButton_toolTip in: org.eclipse.ui.internal.ide.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:06.821
+!MESSAGE NLS unused message: CleanDialog_cleanSelectedTaskName in: org.eclipse.ui.internal.ide.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:06.822
+!MESSAGE NLS unused message: RecentWorkspacesPreferencePage_PromptAtStartup_label in: org.eclipse.ui.internal.ide.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:06.823
+!MESSAGE NLS unused message: RecentWorkspacesPreferencePage_RemoveButton_label in: org.eclipse.ui.internal.ide.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:13.764
+!MESSAGE NLS unused message: url_couldNotResolve_projectDoesNotExist in: org.eclipse.core.internal.utils.messages
+
+!ENTRY org.eclipse.core.resources 2 10035 2021-09-17 14:55:13.820
+!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.
+
+!ENTRY org.eclipse.core.resources 4 567 2021-09-17 14:55:13.823
+!MESSAGE 스냅샷 파일을 읽을 수 없습니다.
+!STACK 0
+java.io.EOFException
+	at java.io.DataInputStream.readInt(Unknown Source)
+	at org.eclipse.core.internal.resources.SaveManager.restoreSnapshots(SaveManager.java:854)
+	at org.eclipse.core.internal.resources.SaveManager.restore(SaveManager.java:648)
+	at org.eclipse.core.internal.resources.SaveManager.startup(SaveManager.java:1326)
+	at org.eclipse.core.internal.resources.Workspace.startup(Workspace.java:1953)
+	at org.eclipse.core.internal.resources.Workspace.open(Workspace.java:1716)
+	at org.eclipse.core.resources.ResourcesPlugin.start(ResourcesPlugin.java:376)
+	at org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(BundleContextImpl.java:1009)
+	at java.security.AccessController.doPrivileged(Native Method)
+	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:1003)
+	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:984)
+	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)
+	at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:265)
+	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:400)
+	at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:111)
+	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:427)
+	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:193)
+	at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass(BundleLoader.java:370)
+	at org.eclipse.osgi.framework.internal.core.SingleSourcePackage.loadClass(SingleSourcePackage.java:33)
+	at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(BundleLoader.java:443)
+	at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:399)
+	at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:387)
+	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:87)
+	at java.lang.ClassLoader.loadClass(Unknown Source)
+	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:114)
+	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
+	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
+	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
+	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386)
+	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
+	at java.lang.reflect.Method.invoke(Unknown Source)
+	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
+	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
+	at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
+
+!ENTRY org.eclipse.core.resources 4 567 2021-09-17 14:55:13.860
+!MESSAGE {0}'의 메타데이터를 읽을 수 없습니다.  예기치 않은 버전: 0
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:14.061
+!MESSAGE NLS unused message: Shortcuts_shortcutTab in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:14.061
+!MESSAGE NLS unused message: Shortcuts_selectShortcutsLabel in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:14.062
+!MESSAGE NLS unused message: Shortcuts_availableMenus in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:14.062
+!MESSAGE NLS unused message: Shortcuts_availableCategories in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:14.063
+!MESSAGE NLS unused message: Shortcuts_allShortcuts in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:14.063
+!MESSAGE NLS unused message: Util_listNull in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:14.064
+!MESSAGE NLS unused message: OpenBrowserHandler_NoInfoDialogTitle in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:14.064
+!MESSAGE NLS unused message: AboutFeaturesDialog_SimpleTitle in: org.eclipse.ui.internal.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:18.745
+!MESSAGE NLS unused message: BinaryDumpHandler_1 in: com.tomato.exerd.handler.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:18.746
+!MESSAGE NLS unused message: ConvertToXMLHandler_1 in: com.tomato.exerd.handler.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:18.746
+!MESSAGE NLS unused message: SelectHandler_11 in: com.tomato.exerd.handler.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:18.747
+!MESSAGE NLS unused message: ToggleColumnVisibilityHandler_4 in: com.tomato.exerd.handler.messages
+
+!ENTRY org.eclipse.osgi 2 1 2021-09-17 14:55:18.747
+!MESSAGE NLS unused message: ToggleColumnVisibilityHandler_5 in: com.tomato.exerd.handler.messages
+
+!ENTRY org.eclipse.core.resources 4 567 2021-09-17 15:42:21.717
+!MESSAGE {0}'의 메타데이터를 읽을 수 없습니다.  예기치 않은 버전: 0

BIN
산출물/3.설계/ERD/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version


BIN
산출물/3.설계/ERD/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version


BIN
산출물/3.설계/ERD/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap


BIN
산출물/3.설계/ERD/.metadata/.plugins/org.eclipse.core.resources/.root/1.tree


BIN
산출물/3.설계/ERD/.metadata/.plugins/org.eclipse.core.resources/.root/88.tree


BIN
산출물/3.설계/ERD/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources


BIN
산출물/3.설계/ERD/.metadata/.plugins/org.eclipse.core.resources/.snap


BIN
산출물/3.설계/ERD/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml


BIN
산출물/3.설계/ERD/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml


BIN
산출물/3.설계/ERD/ST24.exerd


+ 494 - 61
산출물/4.구축/통계/회원통계.sql

@@ -1,74 +1,507 @@
+-- 회원통계 > 가입통계
+SELECT
+    'TOTAL' AS TERM
+    , DATE_FORMAT(DAY, '%Y-%m-%d') AS DAY
+    , SUM(ALL_CNT) AS ALL_CNT
+    , SUM(REAL_CNT) AS REAL_CNT
+    , SUM(DORM_CNT) AS DORM_CNT
+    , SUM(VIP_CNT) AS VIP_CNT
+    , SUM(GOLD_CNT) AS GOLD_CNT
+    , SUM(SILVER_CNT) AS SILVER_CNT
+    , SUM(BRONZE_CNT) AS BRONZE_CNT
+    , SUM(WELCOME_CNT) AS WELCOME_CNT
+    , SUM(JOIN_CNT) AS JOIN_CNT
+    , SUM(DR_JOIN_CNT) AS DR_JOIN_CNT
+    , SUM(AF_JOIN_CNT) AS AF_JOIN_CNT
+    , SUM(CHG_DORM_CNT) AS CHG_DORM_CNT
+    , SUM(RM_DORM_CNT) AS RM_DORM_CNT
+    , SUM(SECEED_CNT) AS SECEED_CNT
+FROM TB_STAT_CUST
+WHERE DAY = DATE_FORMAT('20210731', '%Y%m%d') -- 마지막날짜변수
+    AND SEX_GB IN('G007_M','G007_F','G007_X') -- 성별
+    AND AGE IN('10','20','30','40','X')
+GROUP BY DAY
+UNION ALL
+SELECT
+    'LIST' AS TERM
+    , DATE_FORMAT(DAY, '%Y-%m-%d') AS DAY
+    , SUM(ALL_CNT) AS ALL_CNT
+    , SUM(REAL_CNT) AS REAL_CNT
+    , SUM(DORM_CNT) AS DORM_CNT
+    , SUM(VIP_CNT) AS VIP_CNT
+    , SUM(GOLD_CNT) AS GOLD_CNT
+    , SUM(SILVER_CNT) AS SILVER_CNT
+    , SUM(BRONZE_CNT) AS BRONZE_CNT
+    , SUM(WELCOME_CNT) AS WELCOME_CNT
+    , SUM(JOIN_CNT) AS JOIN_CNT
+    , SUM(DR_JOIN_CNT) AS DR_JOIN_CNT
+    , SUM(AF_JOIN_CNT) AS AF_JOIN_CNT
+    , SUM(CHG_DORM_CNT) AS CHG_DORM_CNT
+    , SUM(RM_DORM_CNT) AS RM_DORM_CNT
+    , SUM(SECEED_CNT) AS SECEED_CNT
+FROM TB_STAT_CUST
+WHERE DAY >= DATE_FORMAT('20210601', '%Y%m%d')
+    AND DAY <= DATE_FORMAT(CONCAT('20210930','235959'), '%Y%m%d%h%i%s')
+    AND SEX_GB IN('G007_M','G007_F','G007_X') -- 성별
+    AND AGE IN('10','20','30','40','X')
+GROUP BY DAY
+ORDER BY TERM DESC, DAY DESC
+;
 
 
-WITH TAB_ALL AS (
-    SELECT
-        IFNULL(FN_DEC_AES(SEX_GB), 'G007_X') AS SEX_GB
-        , CASE WHEN FN_DEC_AES(BIRTH_YMD) = '' OR FN_DEC_AES(BIRTH_YMD) IS NULL THEN 'X'
-			   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
-			   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
-			   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
-			   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
-			   ELSE 'X' END                                                  AS AGE
-        , CUST_STAT
-        , CUST_GRADE
-    FROM TB_CUSTOMER
-    WHERE CUST_NO > 0
-        -- AND JOIN_DT >= DATE_FORMAT('20200731', '%Y%m%d')
-        AND JOIN_DT <= DATE_FORMAT(CONCAT('20171231','235959'), '%Y%m%d%h%i%s')
-)
--- 2018 이전
-, TAB_ALL_CNT AS(
-    SELECT
-        DATE_FORMAT('20200731', '%Y%m%d') AS TERM
-        , COUNT(1) AS VAL
-        , SEX_GB, AGE, CUST_STAT, CUST_GRADE
-    FROM TAB_ALL
-    GROUP BY SEX_GB, AGE, CUST_STAT, CUST_GRADE
-)
-SELECT * FROM TAB_ALL_CNT
+-- 회원통계 > 등급별주문현황
+SELECT
+    CASE WHEN A.CUST_GRADE = 'G110_10' THEN 1
+        WHEN A.CUST_GRADE = 'G110_20' THEN 2
+        WHEN A.CUST_GRADE = 'G110_30' THEN 3
+        WHEN A.CUST_GRADE = 'G110_40' THEN 4
+        WHEN A.CUST_GRADE = 'G110_50' THEN 5
+    ELSE 6 END AS PRIORITY
+    , FN_GET_CODE_NM('G110', A.CUST_GRADE) AS CUST_GRADE
+    , SUM(A.ORD_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_ORD_AMT -- 총매출액
+    , SUM(A.ORD_AMT) AS ORD_ATM -- 매출액
+    , SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT -- 취/반품액
+    , SUM(A.ORD_CNT) AS ORD_CNT -- 주문수
+    , SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY -- 취/반품갯수
+    , ROUND(CEIL(AVG(A.ORD_CNT) * 10) / 10, 1) AS AVG_ORD_CNT -- 평균주문수
+    , ROUND(CEIL(AVG(A.SELL_QTY) * 10) / 10, 1) AS AVG_SELL_QTY -- 평균주문상품개수
+    , FLOOR(SUM(A.ORD_AMT - A.CNCL_AMT - A.RTN_AMT) / SUM(A.ORD_CNT)) AS CUST_PRICE -- 객단가
+FROM TB_STAT_CUST_ORD A
+WHERE A.DAY >= DATE_FORMAT('20210701', '%Y%m%d') -- 시작일변수
+    AND A.DAY <= DATE_FORMAT(CONCAT('20210930', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
+    -- AND A.FRONT_GB IN('P','M','A') -- 디바이스
+    -- AND A.SEX_GB IN('G007_M','G007_F','G007_X') -- 성별
+    -- AND A.AGE IN('10','20','30','40','X')
+    -- AND BRAND_CD IN() -- 브랜드
+    -- AND ITEMKIND_CD IN() -- 카테고리
+GROUP BY A.CUST_GRADE
+ORDER BY PRIORITY
 ;
 
-WITH TAB_ALL AS (
-    SELECT
-        DATE_FORMAT(JOIN_DT, '%Y%m%d') AS TERM
-        , IFNULL(FN_DEC_AES(SEX_GB), 'G007_X') AS SEX_GB
-        , CASE WHEN FN_DEC_AES(BIRTH_YMD) = '' OR FN_DEC_AES(BIRTH_YMD) IS NULL THEN 'X'
-			   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
-			   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
-			   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
-			   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
-			   ELSE 'X' END                                                  AS AGE                                                 AS AGE
-        , CUST_STAT
-        , CUST_GRADE
-    FROM TB_CUSTOMER
-    WHERE CUST_NO > 0
-        AND JOIN_DT >= DATE_FORMAT('20200731', '%Y%m%d')
-        AND JOIN_DT <= DATE_FORMAT(CONCAT('20200731','235959'), '%Y%m%d%h%i%s')
-)
--- 전체회원
-, TAB_ALL_CNT AS(
-    SELECT
-        DATE_FORMAT(TERM, '%Y%m%d') AS TERM
-        , COUNT(1) AS VAL
-        , SEX_GB, AGE, CUST_STAT, CUST_GRADE
-    FROM TAB_ALL
-    GROUP BY TERM, SEX_GB, AGE, CUST_STAT, CUST_GRADE
-)
-SELECT * FROM TAB_ALL_CNT
+-- 회원통계 > 연령별주문현황
+SELECT
+    CASE WHEN A.AGE != 'X' THEN CONCAT(A.AGE, '대') ELSE '50대이상/기타' END AS AGE
+    , FN_GET_CODE_NM('G007', A.SEX_GB) AS SEX_GB
+    , SUM(A.ORD_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_ORD_AMT -- 총매출액
+    , SUM(A.ORD_AMT) AS ORD_ATM -- 매출액
+    , SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT -- 취/반품액
+    , SUM(A.ORD_CNT) AS ORD_CNT -- 주문수
+    , SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY -- 취/반품갯수
+    , ROUND(CEIL(AVG(A.ORD_CNT) * 10) / 10, 1) AS AVG_ORD_CNT -- 평균주문수
+    , ROUND(CEIL(AVG(A.SELL_QTY) * 10) / 10, 1) AS AVG_SELL_QTY -- 평균주문상품개수
+    , FLOOR(SUM(A.ORD_AMT - A.CNCL_AMT - A.RTN_AMT) / SUM(A.ORD_CNT)) AS CUST_PRICE -- 객단가
+FROM TB_STAT_CUST_ORD A
+WHERE A.DAY >= DATE_FORMAT('20210701', '%Y%m%d') -- 시작일변수
+    AND A.DAY <= DATE_FORMAT(CONCAT('20210701', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
+    -- AND A.FRONT_GB IN('P','M','A') -- 디바이스
+    -- AND A.CUST_GRADE IN('G110_10','G110_20','G110_30','G110_40','G110_50','G110') -- 등급
+    -- AND BRAND_CD IN() -- 브랜드
+    -- AND ITEMKIND_CD IN() -- 카테고리
+GROUP BY A.AGE, A.SEX_GB
+ORDER BY A.AGE, A.SEX_GB
 ;
 
-SELECT *
-FROM TB_CUSTOMER
-WHERE JOIN_DT >= DATE_FORMAT('20200701', '%Y%m%d')
-        AND JOIN_DT <= DATE_FORMAT(CONCAT('20200701','235959'), '%Y%m%d%h%i%s')
+
+-- 회원통계 > 구매자랭킹
+WITH TAB AS (
+        SELECT *
+        FROM (
+            SELECT A.ORD_NO
+                , B.ORD_DTL_NO
+                , B.ORD_QTY
+                , B.CNCL_RTN_QTY
+                , B.ORD_AMT
+                , B.CNCL_RTN_AMT
+                , B.CPN1_DC_AMT
+                , A.PAY_DT
+                , A.FRONT_GB
+                , C.ITEMKIND_CD
+                , C.BRAND_CD
+                , E.CUST_NO
+                , E.CUST_GRADE
+                , RANK() OVER (PARTITION BY B.ORD_DTL_NO ORDER BY B.ORD_DTL_HST_SQ) AS RNK
+            FROM TB_ORDER A,
+                TB_ORDER_DETAIL_HST B,
+                TB_GOODS C,
+                TB_CUSTOMER E
+            WHERE A.ORD_NO = B.ORD_NO
+                AND B.GOODS_CD = C.GOODS_CD
+                AND A.CUST_NO = E.CUST_NO
+                AND A.PAY_DT >= DATE_FORMAT('20210920', '%Y%m%d')                         -- 시작일변수
+                AND A.PAY_DT <= DATE_FORMAT(CONCAT('20210926', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
+                AND E.CUST_NO > 0
+                AND A.MALL_GB = 'G011_10'
+                AND B.ORD_EXCH_GB = 'O'
+                AND B.ORD_DTL_STAT = 'G013_20' -- 결제완료
+                -- AND A.FRONT_GB IN('P','M','A') -- 디바이스
+                -- AND FN_DEC_AES(E.SEX_GB) IN('G007_M','G007_F','G007_X') -- 성별
+                /*AND CASE WHEN FN_DEC_AES(E.BIRTH_YMD) = '' OR FN_DEC_AES(E.BIRTH_YMD) IS NULL THEN 'X'
+                       WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(E.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
+                       WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(E.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
+                       WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(E.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
+                       WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(E.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
+                       ELSE 'X' END  IN('10','20','30','40','X') -- 성별*/
+                -- AND BRAND_CD IN() -- 브랜드
+                -- AND ITEMKIND_CD IN() -- 카테고리
+        ) A
+        WHERE RNK = 1
+    )
+    -- 판매수
+    , TAB_SELL_QTY AS (
+        SELECT
+            SUM(ORD_QTY) AS VAL
+            , '1' AS GBN
+            , CUST_NO
+        FROM TAB
+        GROUP BY CUST_NO
+    )
+    -- 매출
+    , TAB_ORD AS (
+        SELECT
+            SUM(ORD_AMT + CPN1_DC_AMT + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = A.ORD_DTL_NO)) AS VAL
+            , '2' AS GBN
+            , CUST_NO
+        FROM TAB A
+        GROUP BY CUST_NO
+    )
+    -- 취소갯수
+    , TAB_CNCL_QTY AS (
+        SELECT SUM(CHG_QTY) AS VAL
+            , '3' AS GBN
+            , C.CUST_NO
+        FROM TB_ORDER_CHANGE_DETAIL A, TB_ORDER_DETAIL B, TB_ORDER C, TB_GOODS E, TB_CUSTOMER G
+        WHERE A.ORD_DTL_NO = B.ORD_DTL_NO
+            AND B.ORD_NO = C.ORD_NO
+            AND B.GOODS_CD = E.GOODS_CD
+            AND C.CUST_NO = G.CUST_NO
+            AND CHG_STAT = 'G685_18' -- 결제후취소
+            AND COMPLETE_DT >= DATE_FORMAT('20210920', '%Y%m%d') -- 시작일변수
+            AND COMPLETE_DT <= DATE_FORMAT(CONCAT('20210926', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
+            AND MALL_GB = 'G011_10'
+            AND G.CUST_NO > 0
+            -- AND C.FRONT_GB IN('P','M','A') -- 디바이스
+            -- AND FN_DEC_AES(G.SEX_GB) IN('G007_M','G007_F','G007_X') -- 성별
+            /*AND CASE WHEN FN_DEC_AES(E.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
+                   ELSE 'X' END  IN('10','20','30','40','X') -- 성별*/
+            -- AND BRAND_CD IN() -- 브랜드
+            -- AND ITEMKIND_CD IN() -- 카테고리
+        GROUP BY C.CUST_NO
+    )
+    -- 반품갯수
+    , TAB_RTN_QTY AS (
+        SELECT SUM(CHG_QTY) AS VAL
+            , '4' AS GBN
+            , C.CUST_NO
+        FROM TB_ORDER_CHANGE_DETAIL A, TB_ORDER_DETAIL B, TB_ORDER C, TB_GOODS E, TB_CUSTOMER G
+        WHERE A.ORD_DTL_NO = B.ORD_DTL_NO
+            AND B.ORD_NO = C.ORD_NO
+            AND B.GOODS_CD = E.GOODS_CD
+            AND C.CUST_NO = G.CUST_NO
+            AND CHG_STAT = 'G685_60' -- 반품완료
+            AND COMPLETE_DT >= DATE_FORMAT('20210920', '%Y%m%d') -- 시작일변수
+            AND COMPLETE_DT <= DATE_FORMAT(CONCAT('20210926', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
+            AND MALL_GB = 'G011_10'
+            AND G.CUST_NO > 0
+            -- AND C.FRONT_GB IN('P','M','A') -- 디바이스
+            -- AND FN_DEC_AES(G.SEX_GB) IN('G007_M','G007_F','G007_X') -- 성별
+            /*AND CASE WHEN FN_DEC_AES(E.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
+                   ELSE 'X' END  IN('10','20','30','40','X') -- 성별*/
+            -- AND BRAND_CD IN() -- 브랜드
+            -- AND ITEMKIND_CD IN() -- 카테고리
+        GROUP BY C.CUST_NO
+    )
+    -- 취소액
+    , TAB_CNCL_AMT AS (
+        SELECT SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * B.CHG_QTY) AS VAL
+            , '5' AS GBN
+            , D.CUST_NO
+        FROM TB_ORDER_CHANGE_DETAIL B, TB_ORDER_DETAIL C, TB_ORDER D, TB_GOODS E, TB_CUSTOMER G
+        WHERE B.ORD_DTL_NO = C.ORD_DTL_NO
+            AND C.ORD_NO = D.ORD_NO
+            AND C.GOODS_CD = E.GOODS_CD
+            AND D.CUST_NO = G.CUST_NO
+            AND CHG_STAT = 'G685_18' -- 결제후취소
+            AND B.COMPLETE_DT >= DATE_FORMAT('20210920', '%Y%m%d') -- 시작일변수
+            AND B.COMPLETE_DT <= DATE_FORMAT(CONCAT('20210926', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
+            AND MALL_GB = 'G011_10'
+            AND G.CUST_NO > 0
+            -- AND D.FRONT_GB IN('P','M','A') -- 디바이스
+            -- AND FN_DEC_AES(G.SEX_GB) IN('G007_M','G007_F','G007_X') -- 성별
+            /*AND CASE WHEN FN_DEC_AES(E.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
+                   ELSE 'X' END  IN('10','20','30','40','X') -- 성별*/
+            -- AND BRAND_CD IN() -- 브랜드
+            -- AND ITEMKIND_CD IN() -- 카테고리
+        GROUP BY D.CUST_NO
+    )
+    -- 반품액
+    , TAB_RTN_AMT AS (
+        SELECT SUM((C.CURR_PRICE + (SELECT SUM(OPT_ADD_PRICE * ITEM_QTY) FROM TB_ORDER_DETAIL_ITEM X WHERE X.ORD_DTL_NO = C.ORD_DTL_NO)) * B.CHG_QTY) AS VAL
+            , '6' AS GBN
+            , D.CUST_NO
+        FROM TB_ORDER_CHANGE_DETAIL B, TB_ORDER_DETAIL C, TB_ORDER D, TB_GOODS E, TB_CUSTOMER G
+        WHERE B.ORD_DTL_NO = C.ORD_DTL_NO
+            AND C.ORD_NO = D.ORD_NO
+            AND C.GOODS_CD = E.GOODS_CD
+            AND D.CUST_NO = G.CUST_NO
+            AND CHG_STAT = 'G685_60' -- 반품완료
+            AND B.COMPLETE_DT >= DATE_FORMAT('20210920', '%Y%m%d') -- 시작일변수
+            AND B.COMPLETE_DT <= DATE_FORMAT(CONCAT('20210926', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
+            AND MALL_GB = 'G011_10'
+            AND G.CUST_NO > 0
+            -- AND D.FRONT_GB IN('P','M','A') -- 디바이스
+            -- AND FN_DEC_AES(G.SEX_GB) IN('G007_M','G007_F','G007_X') -- 성별
+            /*AND CASE WHEN FN_DEC_AES(E.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 10 AND 19 THEN '10'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 20 AND 29 THEN '20'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 30 AND 39 THEN '30'
+                   WHEN (DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(SUBSTRING(FN_DEC_AES(G.BIRTH_YMD), 1, 4), '0101'), '%Y') + 1) BETWEEN 40 AND 49 THEN '40'
+                   ELSE 'X' END  IN('10','20','30','40','X') -- 성별*/
+            -- AND BRAND_CD IN() -- 브랜드
+            -- AND ITEMKIND_CD IN() -- 카테고리
+        GROUP BY D.CUST_NO
+    )
+   -- 주문수
+   , TAB_ORD_CNT AS (
+        SELECT
+            SUM(VAL) AS VAL
+             , '7' AS GBN
+             , CUST_NO
+        FROM (
+                 SELECT
+                     1 AS VAL
+                      , ORD_NO
+                      , CUST_NO
+                 FROM TAB
+                 GROUP BY ORD_NO, CUST_NO
+             ) A
+        GROUP BY CUST_NO
+    )
+    SELECT
+        CONCAT(SUBSTRING(CUST_ID, 1, 3), '****', '(', SUBSTRING(FN_DEC_AES(CUST_NM), 1, 1), '**', ')') AS CUST_ID -- 아이디
+        , FN_GET_CODE_NM('G110', CUST_GRADE) AS CUST_GRADE -- 등급
+        , SUM(ORD_AMT - CNCL_AMT - RTN_AMT) AS TOT_ORD_AMT -- 매출액
+        , SUM(ORD_CNT) AS ORD_CNT -- 주문수
+        , SUM(SELL_QTY - CNCL_QTY - RTN_QTY) AS SELL_QTY -- 판매수
+        , FLOOR(SUM(ORD_AMT - CNCL_AMT - RTN_AMT) / SUM(ORD_CNT)) AS CUST_PRICE -- 객단가
+        , IFNULL((SELECT SUM(RM_PNT_AMT) FROM TB_CUST_POINT CP WHERE CP.CUST_NO = X.CUST_NO AND EXP_CMP_DT IS NULL), 0) AS CUST_POINT -- 회원포인트
+    FROM (
+        SELECT
+            CUST_NO
+            , SUM(CASE WHEN GBN = '1' THEN VAL ELSE 0 END) AS SELL_QTY -- 판매수
+            , SUM(CASE WHEN GBN = '2' THEN VAL ELSE 0 END) AS ORD_AMT -- 매출액(판매금액)
+            , SUM(CASE WHEN GBN = '3' THEN VAL ELSE 0 END) AS CNCL_QTY -- 취소수량
+            , SUM(CASE WHEN GBN = '4' THEN VAL ELSE 0 END) AS RTN_QTY -- 반품수량
+            , SUM(CASE WHEN GBN = '5' THEN VAL ELSE 0 END) AS CNCL_AMT -- 취소금액
+            , SUM(CASE WHEN GBN = '6' THEN VAL ELSE 0 END) AS RTN_AMT -- 반품금액
+            , SUM(CASE WHEN GBN = '7' THEN VAL ELSE 0 END) AS ORD_CNT -- 주문수
+        FROM (
+            SELECT * FROM TAB_SELL_QTY
+            UNION ALL
+            SELECT * FROM TAB_ORD
+            UNION ALL
+            SELECT * FROM TAB_CNCL_QTY
+            UNION ALL
+            SELECT * FROM TAB_RTN_QTY
+            UNION ALL
+            SELECT * FROM TAB_CNCL_AMT
+            UNION ALL
+            SELECT * FROM TAB_RTN_AMT
+            UNION ALL
+            SELECT * FROM TAB_ORD_CNT
+        ) A
+        GROUP BY CUST_NO
+    ) X, TB_CUSTOMER Y
+    WHERE X.CUST_NO = Y.CUST_NO
+    GROUP BY X.CUST_NO
+    ORDER BY TOT_ORD_AMT DESC
+    LIMIT 50
 ;
 
-SELECT * FROM TB_CUSTOMER;
 
 
 
-SELECT MIN(DORMANT_DT) FROM TB_DORMANT_CUST;
-SELECT MIN(JOIN_DT) FROM TB_CUSTOMER;
 
-SELECT COUNT(1) FROM TB_CUSTOMER WHERE JOIN_DT <= DATE_FORMAT(CONCAT('20171231','235959'), '%Y%m%d%h%i%s');
+-- 회원통계 > 회원활동현황 > 미로그인현황
+SELECT
+    X.*
+    , ROUND(CNT_5 / TOT_CNT * 100) AS PER_CNT_5
+    , ROUND(CNT_4 / TOT_CNT * 100) AS PER_CNT_4
+    , ROUND(CNT_3 / TOT_CNT * 100) AS PER_CNT_3
+    , ROUND(CNT_2 / TOT_CNT * 100) AS PER_CNT_2
+    , ROUND(CNT_1 / TOT_CNT * 100) AS PER_CNT_1
+FROM (
+    SELECT
+        SUM(CASE WHEN GB = 5 THEN CNT ELSE 0 END) AS CNT_5
+        , SUM(CASE WHEN GB = 4 THEN CNT ELSE 0 END) AS CNT_4
+        , SUM(CASE WHEN GB = 3 THEN CNT ELSE 0 END) AS CNT_3
+        , SUM(CASE WHEN GB = 2 THEN CNT ELSE 0 END) AS CNT_2
+        , SUM(CASE WHEN GB = 1 THEN CNT ELSE 0 END) AS CNT_1
+        , SUM(CNT) AS TOT_CNT
+    FROM (
+        -- 1년
+        SELECT COUNT(1) AS CNT
+            , 5 AS GB -- 1년 ~
+        FROM TB_CUSTOMER
+        WHERE CUST_NO > 0
+            AND CUST_STAT = 'G104_10'
+            AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 YEAR ), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
+        -- 12개월
+        UNION ALL
+        SELECT COUNT(1) AS CNT
+            , 4 AS GB -- 9개월~12개월
+        FROM TB_CUSTOMER
+        WHERE CUST_NO > 0
+            AND CUST_STAT = 'G104_10'
+            AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 YEAR ), '%Y%m%d%H%i%s')
+            AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
+        -- 9개월
+        UNION ALL
+        SELECT COUNT(1) AS CNT
+            , 3 AS GB -- 6개월~9개월
+        FROM TB_CUSTOMER
+        WHERE CUST_NO > 0
+            AND CUST_STAT = 'G104_10'
+            AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
+            AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
+        -- 6개월
+        UNION ALL
+        SELECT COUNT(1) AS CNT
+            , 2 AS GB -- 3개월~6개월
+        FROM TB_CUSTOMER
+        WHERE CUST_NO > 0
+            AND CUST_STAT = 'G104_10'
+            AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
+            AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
+        -- 3개월
+        UNION ALL
+        SELECT COUNT(1) AS CNT
+            , 1 AS GB -- ~3개월
+        FROM TB_CUSTOMER
+        WHERE CUST_NO > 0
+            AND CUST_STAT = 'G104_10'
+            AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
+            AND LOGIN_LDT < DATE_FORMAT(NOW(), '%Y%m%d%H%i%s')
+    ) Z
+) X
+;
 
+-- 회원통계 > 회원활동현황 > 미로그인현황 > 엑셀다운로드
+SELECT
+    CUST_ID
+    , FN_DEC_AES(CUST_NM) AS CUST_NM
+    , TIMESTAMPDIFF(MONTH, LOGIN_LDT, NOW()) AS MONTHS
+    , FN_DEC_AES(CELL_PHNNO) AS CELL_PHNNO
+    , FN_DEC_AES(EMAIL) AS EMAIL
+    , SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
+FROM TB_CUSTOMER
+WHERE CUST_NO > 0
+    AND CUST_STAT = 'G104_10'
+    AND LOGIN_LDT < DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
+;
+
+-- 회원통계 > 회원활동현황 > 마케팅수신동의현황
+-- SMS
+SELECT
+    X.*
+    , ROUND(CNT_4 / TOT_CNT * 100) AS PER_CNT_4
+    , ROUND(CNT_3 / TOT_CNT * 100) AS PER_CNT_3
+    , ROUND(CNT_2 / TOT_CNT * 100) AS PER_CNT_2
+    , ROUND(CNT_1 / TOT_CNT * 100) AS PER_CNT_1
+FROM (
+     SELECT SUM(CASE WHEN GB = 4 THEN CNT ELSE 0 END) AS CNT_4
+          , SUM(CASE WHEN GB = 3 THEN CNT ELSE 0 END) AS CNT_3
+          , SUM(CASE WHEN GB = 2 THEN CNT ELSE 0 END) AS CNT_2
+          , SUM(CASE WHEN GB = 1 THEN CNT ELSE 0 END) AS CNT_1
+          , SUM(CNT)                                  AS TOT_CNT
+     FROM (
+          SELECT COUNT(1) AS CNT
+               , 4        AS GB
+          FROM TB_CUSTOMER
+          WHERE CUST_NO > 0
+            AND CUST_STAT = 'G104_10'
+            AND SMS_AGREE_YN = 'Y'
+          -- EMAIL
+          UNION ALL
+          SELECT COUNT(1) AS CNT
+               , 3        AS GB
+          FROM TB_CUSTOMER
+          WHERE CUST_NO > 0
+            AND CUST_STAT = 'G104_10'
+            AND EMAIL_AGREE_YN = 'Y'
+          -- 푸쉬
+          UNION ALL
+          SELECT COUNT(1) AS CNT
+               , 2        AS GB
+          FROM TB_CUSTOMER
+          WHERE CUST_NO > 0
+            AND CUST_STAT = 'G104_10'
+            AND APP_AGREE_YN = 'Y'
+          -- 미동의
+          UNION ALL
+          SELECT COUNT(1) AS CNT
+               , 1        AS GB
+          FROM TB_CUSTOMER
+          WHERE CUST_NO > 0
+            AND CUST_STAT = 'G104_10'
+            AND SMS_AGREE_YN = 'N'
+            AND EMAIL_AGREE_YN = 'N'
+            AND APP_AGREE_YN = 'N'
+      ) Z
+ ) X
+;
+
+-- 회원통계 > 회원활동현황 > 휴면전환 잔여일별현황
+SELECT
+    SUM(CASE WHEN GB = 4 THEN CNT ELSE 0 END) AS CNT_4 -- 12개월
+    , SUM(CASE WHEN GB = 3 THEN CNT ELSE 0 END) AS CNT_3 -- 9개월
+    , SUM(CASE WHEN GB = 2 THEN CNT ELSE 0 END) AS CNT_2 -- 6개월
+    , SUM(CASE WHEN GB = 1 THEN CNT ELSE 0 END) AS CNT_1 -- 9개월
+FROM (
+    -- 12개월
+    SELECT COUNT(1) AS CNT
+        , 4 AS GB -- 12개월
+    FROM TB_CUSTOMER
+    WHERE CUST_NO > 0
+        AND CUST_STAT = 'G104_10'
+        AND LOGIN_LDT > DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY ), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
+    -- 9개월
+    UNION ALL
+    SELECT COUNT(1) AS CNT
+        , 3 AS GB -- 9개월
+    FROM TB_CUSTOMER
+    WHERE CUST_NO > 0
+        AND CUST_STAT = 'G104_10'
+        AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
+        AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY ), '%Y%m%d%H%i%s')
+    -- 6개월
+    UNION ALL
+    SELECT COUNT(1) AS CNT
+        , 2 AS GB -- 6개월
+    FROM TB_CUSTOMER
+    WHERE CUST_NO > 0
+        AND CUST_STAT = 'G104_10'
+        AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
+        AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
+    -- 3개월
+    UNION ALL
+    SELECT COUNT(1) AS CNT
+        , 1 AS GB -- ~3개월
+    FROM TB_CUSTOMER
+    WHERE CUST_NO > 0
+        AND CUST_STAT = 'G104_10'
+        AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
+        AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
+) Z
+;