회원통계.sql 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. -- 회원통계 > 가입통계
  2. SELECT
  3. DATE_FORMAT(DAY,'%Y-%m-%d') AS DAY
  4. , MAX(ALL_CNT) AS ALL_CNT
  5. , MAX(REAL_CNT) AS REAL_CNT
  6. , MAX(DORM_CNT) AS DORM_CNT
  7. , MAX(VIP_CNT) AS VIP_CNT
  8. , MAX(GOLD_CNT) AS GOLD_CNT
  9. , MAX(SILVER_CNT) AS SILVER_CNT
  10. , MAX(BRONZE_CNT) AS BRONZE_CNT
  11. , MAX(WELCOME_CNT) AS WELCOME_CNT
  12. , SUM(JOIN_CNT) AS JOIN_CNT
  13. , SUM(DR_JOIN_CNT) AS DR_JOIN_CNT
  14. , SUM(AF_JOIN_CNT) AS AF_JOIN_CNT
  15. , SUM(CHG_DORM_CNT) AS CHG_DORM_CNT
  16. , SUM(RM_DORM_CNT) AS RM_DORM_CNT
  17. , SUM(SECEED_CNT) AS SECEED_CNT
  18. FROM TB_STAT_CUST
  19. WHERE DAY >= DATE_FORMAT('20210601', '%Y%m%d')
  20. AND DAY <= DATE_FORMAT(CONCAT('20210930','235959'), '%Y%m%d%h%i%s')
  21. AND SEX_GB IN('G007_M','G007_F','G007_X') -- 성별
  22. AND AGE IN('10','20','30','40','X')
  23. GROUP BY DATE_FORMAT(DAY,'%Y-%m-%d')
  24. ORDER BY DAY DESC
  25. -- 회원통계 > 등급별주문현황
  26. SELECT
  27. CASE WHEN A.CUST_GRADE = 'G110_10' THEN 1
  28. WHEN A.CUST_GRADE = 'G110_20' THEN 2
  29. WHEN A.CUST_GRADE = 'G110_30' THEN 3
  30. WHEN A.CUST_GRADE = 'G110_40' THEN 4
  31. WHEN A.CUST_GRADE = 'G110_50' THEN 5
  32. ELSE 6 END AS PRIORITY
  33. , FN_GET_CODE_NM('G110', A.CUST_GRADE) AS CUST_GRADE
  34. , SUM(A.ORD_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_ORD_AMT -- 총매출액
  35. , SUM(A.ORD_AMT) AS ORD_ATM -- 매출액
  36. , SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT -- 취/반품액
  37. , SUM(A.ORD_CNT) AS ORD_CNT -- 주문수
  38. , SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY -- 취/반품갯수
  39. , ROUND(CEIL(AVG(A.ORD_CNT) * 10) / 10, 1) AS AVG_ORD_CNT -- 평균주문수
  40. , ROUND(CEIL(AVG(A.SELL_QTY) * 10) / 10, 1) AS AVG_SELL_QTY -- 평균주문상품개수
  41. , FLOOR(SUM(A.ORD_AMT - A.CNCL_AMT - A.RTN_AMT) / SUM(A.ORD_CNT)) AS CUST_PRICE -- 객단가
  42. FROM TB_STAT_CUST_ORD A
  43. WHERE A.DAY >= DATE_FORMAT('20210701', '%Y%m%d') -- 시작일변수
  44. AND A.DAY <= DATE_FORMAT(CONCAT('20210930', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
  45. -- AND A.FRONT_GB IN('P','M','A') -- 디바이스
  46. -- AND A.SEX_GB IN('G007_M','G007_F','G007_X') -- 성별
  47. -- AND A.AGE IN('10','20','30','40','X')
  48. -- AND BRAND_CD IN() -- 브랜드
  49. -- AND ITEMKIND_CD IN() -- 카테고리
  50. GROUP BY A.CUST_GRADE
  51. ORDER BY PRIORITY
  52. ;
  53. -- 회원통계 > 연령별주문현황
  54. SELECT
  55. CASE WHEN A.AGE != 'X' THEN CONCAT(A.AGE, '대') ELSE '50대이상/기타' END AS AGE
  56. , FN_GET_CODE_NM('G007', A.SEX_GB) AS SEX_GB
  57. , SUM(A.ORD_AMT - A.CNCL_AMT - A.RTN_AMT) AS TOT_ORD_AMT -- 총매출액
  58. , SUM(A.ORD_AMT) AS ORD_ATM -- 매출액
  59. , SUM(A.CNCL_AMT + A.RTN_AMT) AS CNCL_AMT -- 취/반품액
  60. , SUM(A.ORD_CNT) AS ORD_CNT -- 주문수
  61. , SUM(A.CNCL_QTY + A.RTN_QTY) AS CNCL_QTY -- 취/반품갯수
  62. , ROUND(CEIL(AVG(A.ORD_CNT) * 10) / 10, 1) AS AVG_ORD_CNT -- 평균주문수
  63. , ROUND(CEIL(AVG(A.SELL_QTY) * 10) / 10, 1) AS AVG_SELL_QTY -- 평균주문상품개수
  64. , FLOOR(SUM(A.ORD_AMT - A.CNCL_AMT - A.RTN_AMT) / SUM(A.ORD_CNT)) AS CUST_PRICE -- 객단가
  65. FROM TB_STAT_CUST_ORD A
  66. WHERE A.DAY >= DATE_FORMAT('20210701', '%Y%m%d') -- 시작일변수
  67. AND A.DAY <= DATE_FORMAT(CONCAT('20210701', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
  68. -- AND A.FRONT_GB IN('P','M','A') -- 디바이스
  69. -- AND A.CUST_GRADE IN('G110_10','G110_20','G110_30','G110_40','G110_50','G110') -- 등급
  70. -- AND BRAND_CD IN() -- 브랜드
  71. -- AND ITEMKIND_CD IN() -- 카테고리
  72. GROUP BY A.AGE, A.SEX_GB
  73. ORDER BY A.AGE, A.SEX_GB
  74. ;
  75. -- 회원통계 > 구매자랭킹
  76. WITH TAB AS (
  77. SELECT *
  78. FROM (
  79. SELECT A.ORD_NO
  80. , B.ORD_DTL_NO
  81. , B.ORD_QTY
  82. , B.CNCL_RTN_QTY
  83. , B.ORD_AMT
  84. , B.CNCL_RTN_AMT
  85. , B.CPN1_DC_AMT
  86. , A.PAY_DT
  87. , A.FRONT_GB
  88. , C.ITEMKIND_CD
  89. , C.BRAND_CD
  90. , E.CUST_NO
  91. , E.CUST_GRADE
  92. , RANK() OVER (PARTITION BY B.ORD_DTL_NO ORDER BY B.ORD_DTL_HST_SQ) AS RNK
  93. FROM TB_ORDER A,
  94. TB_ORDER_DETAIL_HST B,
  95. TB_GOODS C,
  96. TB_CUSTOMER E
  97. WHERE A.ORD_NO = B.ORD_NO
  98. AND B.GOODS_CD = C.GOODS_CD
  99. AND A.CUST_NO = E.CUST_NO
  100. AND A.PAY_DT >= DATE_FORMAT('20210920', '%Y%m%d') -- 시작일변수
  101. AND A.PAY_DT <= DATE_FORMAT(CONCAT('20210926', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
  102. AND E.CUST_NO > 0
  103. AND A.MALL_GB = 'G011_10'
  104. AND B.ORD_EXCH_GB = 'O'
  105. AND B.ORD_DTL_STAT = 'G013_20' -- 결제완료
  106. -- AND A.FRONT_GB IN('P','M','A') -- 디바이스
  107. -- AND FN_DEC_AES(E.SEX_GB) IN('G007_M','G007_F','G007_X') -- 성별
  108. /*AND CASE WHEN FN_DEC_AES(E.BIRTH_YMD) = '' OR FN_DEC_AES(E.BIRTH_YMD) IS NULL THEN 'X'
  109. 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'
  110. 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'
  111. 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'
  112. 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'
  113. ELSE 'X' END IN('10','20','30','40','X') -- 성별*/
  114. -- AND BRAND_CD IN() -- 브랜드
  115. -- AND ITEMKIND_CD IN() -- 카테고리
  116. ) A
  117. WHERE RNK = 1
  118. )
  119. -- 판매수
  120. , TAB_SELL_QTY AS (
  121. SELECT
  122. SUM(ORD_QTY) AS VAL
  123. , '1' AS GBN
  124. , CUST_NO
  125. FROM TAB
  126. GROUP BY CUST_NO
  127. )
  128. -- 매출
  129. , TAB_ORD AS (
  130. SELECT
  131. 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
  132. , '2' AS GBN
  133. , CUST_NO
  134. FROM TAB A
  135. GROUP BY CUST_NO
  136. )
  137. -- 취소갯수
  138. , TAB_CNCL_QTY AS (
  139. SELECT SUM(CHG_QTY) AS VAL
  140. , '3' AS GBN
  141. , C.CUST_NO
  142. FROM TB_ORDER_CHANGE_DETAIL A, TB_ORDER_DETAIL B, TB_ORDER C, TB_GOODS E, TB_CUSTOMER G
  143. WHERE A.ORD_DTL_NO = B.ORD_DTL_NO
  144. AND B.ORD_NO = C.ORD_NO
  145. AND B.GOODS_CD = E.GOODS_CD
  146. AND C.CUST_NO = G.CUST_NO
  147. AND CHG_STAT = 'G685_18' -- 결제후취소
  148. AND COMPLETE_DT >= DATE_FORMAT('20210920', '%Y%m%d') -- 시작일변수
  149. AND COMPLETE_DT <= DATE_FORMAT(CONCAT('20210926', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
  150. AND MALL_GB = 'G011_10'
  151. AND G.CUST_NO > 0
  152. -- AND C.FRONT_GB IN('P','M','A') -- 디바이스
  153. -- AND FN_DEC_AES(G.SEX_GB) IN('G007_M','G007_F','G007_X') -- 성별
  154. /*AND CASE WHEN FN_DEC_AES(E.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
  155. 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'
  156. 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'
  157. 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'
  158. 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'
  159. ELSE 'X' END IN('10','20','30','40','X') -- 성별*/
  160. -- AND BRAND_CD IN() -- 브랜드
  161. -- AND ITEMKIND_CD IN() -- 카테고리
  162. GROUP BY C.CUST_NO
  163. )
  164. -- 반품갯수
  165. , TAB_RTN_QTY AS (
  166. SELECT SUM(CHG_QTY) AS VAL
  167. , '4' AS GBN
  168. , C.CUST_NO
  169. FROM TB_ORDER_CHANGE_DETAIL A, TB_ORDER_DETAIL B, TB_ORDER C, TB_GOODS E, TB_CUSTOMER G
  170. WHERE A.ORD_DTL_NO = B.ORD_DTL_NO
  171. AND B.ORD_NO = C.ORD_NO
  172. AND B.GOODS_CD = E.GOODS_CD
  173. AND C.CUST_NO = G.CUST_NO
  174. AND CHG_STAT = 'G685_60' -- 반품완료
  175. AND COMPLETE_DT >= DATE_FORMAT('20210920', '%Y%m%d') -- 시작일변수
  176. AND COMPLETE_DT <= DATE_FORMAT(CONCAT('20210926', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
  177. AND MALL_GB = 'G011_10'
  178. AND G.CUST_NO > 0
  179. -- AND C.FRONT_GB IN('P','M','A') -- 디바이스
  180. -- AND FN_DEC_AES(G.SEX_GB) IN('G007_M','G007_F','G007_X') -- 성별
  181. /*AND CASE WHEN FN_DEC_AES(E.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
  182. 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'
  183. 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'
  184. 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'
  185. 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'
  186. ELSE 'X' END IN('10','20','30','40','X') -- 성별*/
  187. -- AND BRAND_CD IN() -- 브랜드
  188. -- AND ITEMKIND_CD IN() -- 카테고리
  189. GROUP BY C.CUST_NO
  190. )
  191. -- 취소액
  192. , TAB_CNCL_AMT AS (
  193. 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
  194. , '5' AS GBN
  195. , D.CUST_NO
  196. FROM TB_ORDER_CHANGE_DETAIL B, TB_ORDER_DETAIL C, TB_ORDER D, TB_GOODS E, TB_CUSTOMER G
  197. WHERE B.ORD_DTL_NO = C.ORD_DTL_NO
  198. AND C.ORD_NO = D.ORD_NO
  199. AND C.GOODS_CD = E.GOODS_CD
  200. AND D.CUST_NO = G.CUST_NO
  201. AND CHG_STAT = 'G685_18' -- 결제후취소
  202. AND B.COMPLETE_DT >= DATE_FORMAT('20210920', '%Y%m%d') -- 시작일변수
  203. AND B.COMPLETE_DT <= DATE_FORMAT(CONCAT('20210926', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
  204. AND MALL_GB = 'G011_10'
  205. AND G.CUST_NO > 0
  206. -- AND D.FRONT_GB IN('P','M','A') -- 디바이스
  207. -- AND FN_DEC_AES(G.SEX_GB) IN('G007_M','G007_F','G007_X') -- 성별
  208. /*AND CASE WHEN FN_DEC_AES(E.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
  209. 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'
  210. 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'
  211. 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'
  212. 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'
  213. ELSE 'X' END IN('10','20','30','40','X') -- 성별*/
  214. -- AND BRAND_CD IN() -- 브랜드
  215. -- AND ITEMKIND_CD IN() -- 카테고리
  216. GROUP BY D.CUST_NO
  217. )
  218. -- 반품액
  219. , TAB_RTN_AMT AS (
  220. 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
  221. , '6' AS GBN
  222. , D.CUST_NO
  223. FROM TB_ORDER_CHANGE_DETAIL B, TB_ORDER_DETAIL C, TB_ORDER D, TB_GOODS E, TB_CUSTOMER G
  224. WHERE B.ORD_DTL_NO = C.ORD_DTL_NO
  225. AND C.ORD_NO = D.ORD_NO
  226. AND C.GOODS_CD = E.GOODS_CD
  227. AND D.CUST_NO = G.CUST_NO
  228. AND CHG_STAT = 'G685_60' -- 반품완료
  229. AND B.COMPLETE_DT >= DATE_FORMAT('20210920', '%Y%m%d') -- 시작일변수
  230. AND B.COMPLETE_DT <= DATE_FORMAT(CONCAT('20210926', '235959'), '%Y%m%d%H%i%s') -- 종료일변수
  231. AND MALL_GB = 'G011_10'
  232. AND G.CUST_NO > 0
  233. -- AND D.FRONT_GB IN('P','M','A') -- 디바이스
  234. -- AND FN_DEC_AES(G.SEX_GB) IN('G007_M','G007_F','G007_X') -- 성별
  235. /*AND CASE WHEN FN_DEC_AES(E.BIRTH_YMD) = '' OR FN_DEC_AES(G.BIRTH_YMD) IS NULL THEN 'X'
  236. 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'
  237. 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'
  238. 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'
  239. 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'
  240. ELSE 'X' END IN('10','20','30','40','X') -- 성별*/
  241. -- AND BRAND_CD IN() -- 브랜드
  242. -- AND ITEMKIND_CD IN() -- 카테고리
  243. GROUP BY D.CUST_NO
  244. )
  245. -- 주문수
  246. , TAB_ORD_CNT AS (
  247. SELECT
  248. SUM(VAL) AS VAL
  249. , '7' AS GBN
  250. , CUST_NO
  251. FROM (
  252. SELECT
  253. 1 AS VAL
  254. , ORD_NO
  255. , CUST_NO
  256. FROM TAB
  257. GROUP BY ORD_NO, CUST_NO
  258. ) A
  259. GROUP BY CUST_NO
  260. )
  261. SELECT
  262. CONCAT(SUBSTRING(CUST_ID, 1, 3), '****', '(', SUBSTRING(FN_DEC_AES(CUST_NM), 1, 1), '**', ')') AS CUST_ID -- 아이디
  263. , FN_GET_CODE_NM('G110', CUST_GRADE) AS CUST_GRADE -- 등급
  264. , SUM(ORD_AMT - CNCL_AMT - RTN_AMT) AS TOT_ORD_AMT -- 매출액
  265. , SUM(ORD_CNT) AS ORD_CNT -- 주문수
  266. , SUM(SELL_QTY - CNCL_QTY - RTN_QTY) AS SELL_QTY -- 판매수
  267. , FLOOR(SUM(ORD_AMT - CNCL_AMT - RTN_AMT) / SUM(ORD_CNT)) AS CUST_PRICE -- 객단가
  268. , 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 -- 회원포인트
  269. FROM (
  270. SELECT
  271. CUST_NO
  272. , SUM(CASE WHEN GBN = '1' THEN VAL ELSE 0 END) AS SELL_QTY -- 판매수
  273. , SUM(CASE WHEN GBN = '2' THEN VAL ELSE 0 END) AS ORD_AMT -- 매출액(판매금액)
  274. , SUM(CASE WHEN GBN = '3' THEN VAL ELSE 0 END) AS CNCL_QTY -- 취소수량
  275. , SUM(CASE WHEN GBN = '4' THEN VAL ELSE 0 END) AS RTN_QTY -- 반품수량
  276. , SUM(CASE WHEN GBN = '5' THEN VAL ELSE 0 END) AS CNCL_AMT -- 취소금액
  277. , SUM(CASE WHEN GBN = '6' THEN VAL ELSE 0 END) AS RTN_AMT -- 반품금액
  278. , SUM(CASE WHEN GBN = '7' THEN VAL ELSE 0 END) AS ORD_CNT -- 주문수
  279. FROM (
  280. SELECT * FROM TAB_SELL_QTY
  281. UNION ALL
  282. SELECT * FROM TAB_ORD
  283. UNION ALL
  284. SELECT * FROM TAB_CNCL_QTY
  285. UNION ALL
  286. SELECT * FROM TAB_RTN_QTY
  287. UNION ALL
  288. SELECT * FROM TAB_CNCL_AMT
  289. UNION ALL
  290. SELECT * FROM TAB_RTN_AMT
  291. UNION ALL
  292. SELECT * FROM TAB_ORD_CNT
  293. ) A
  294. GROUP BY CUST_NO
  295. ) X, TB_CUSTOMER Y
  296. WHERE X.CUST_NO = Y.CUST_NO
  297. GROUP BY X.CUST_NO
  298. ORDER BY TOT_ORD_AMT DESC
  299. LIMIT 50
  300. ;
  301. -- 회원통계 > 회원활동현황 > 미로그인현황
  302. SELECT
  303. X.*
  304. , ROUND(CNT_5 / TOT_CNT * 100) AS PER_CNT_5
  305. , ROUND(CNT_4 / TOT_CNT * 100) AS PER_CNT_4
  306. , ROUND(CNT_3 / TOT_CNT * 100) AS PER_CNT_3
  307. , ROUND(CNT_2 / TOT_CNT * 100) AS PER_CNT_2
  308. , ROUND(CNT_1 / TOT_CNT * 100) AS PER_CNT_1
  309. FROM (
  310. SELECT
  311. SUM(CASE WHEN GB = 5 THEN CNT ELSE 0 END) AS CNT_5
  312. , SUM(CASE WHEN GB = 4 THEN CNT ELSE 0 END) AS CNT_4
  313. , SUM(CASE WHEN GB = 3 THEN CNT ELSE 0 END) AS CNT_3
  314. , SUM(CASE WHEN GB = 2 THEN CNT ELSE 0 END) AS CNT_2
  315. , SUM(CASE WHEN GB = 1 THEN CNT ELSE 0 END) AS CNT_1
  316. , SUM(CNT) AS TOT_CNT
  317. FROM (
  318. -- 1년
  319. SELECT COUNT(1) AS CNT
  320. , 5 AS GB -- 1년 ~
  321. FROM TB_CUSTOMER
  322. WHERE CUST_NO > 0
  323. AND CUST_STAT = 'G104_10'
  324. AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 YEAR ), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
  325. -- 12개월
  326. UNION ALL
  327. SELECT COUNT(1) AS CNT
  328. , 4 AS GB -- 9개월~12개월
  329. FROM TB_CUSTOMER
  330. WHERE CUST_NO > 0
  331. AND CUST_STAT = 'G104_10'
  332. AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 YEAR ), '%Y%m%d%H%i%s')
  333. AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
  334. -- 9개월
  335. UNION ALL
  336. SELECT COUNT(1) AS CNT
  337. , 3 AS GB -- 6개월~9개월
  338. FROM TB_CUSTOMER
  339. WHERE CUST_NO > 0
  340. AND CUST_STAT = 'G104_10'
  341. AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
  342. AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
  343. -- 6개월
  344. UNION ALL
  345. SELECT COUNT(1) AS CNT
  346. , 2 AS GB -- 3개월~6개월
  347. FROM TB_CUSTOMER
  348. WHERE CUST_NO > 0
  349. AND CUST_STAT = 'G104_10'
  350. AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
  351. AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
  352. -- 3개월
  353. UNION ALL
  354. SELECT COUNT(1) AS CNT
  355. , 1 AS GB -- ~3개월
  356. FROM TB_CUSTOMER
  357. WHERE CUST_NO > 0
  358. AND CUST_STAT = 'G104_10'
  359. AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
  360. AND LOGIN_LDT < DATE_FORMAT(NOW(), '%Y%m%d%H%i%s')
  361. ) Z
  362. ) X
  363. ;
  364. -- 회원통계 > 회원활동현황 > 미로그인현황 > 엑셀다운로드
  365. SELECT
  366. CUST_ID
  367. , FN_DEC_AES(CUST_NM) AS CUST_NM
  368. , TIMESTAMPDIFF(MONTH, LOGIN_LDT, NOW()) AS MONTHS
  369. , FN_DEC_AES(CELL_PHNNO) AS CELL_PHNNO
  370. , FN_DEC_AES(EMAIL) AS EMAIL
  371. , SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
  372. FROM TB_CUSTOMER
  373. WHERE CUST_NO > 0
  374. AND CUST_STAT = 'G104_10'
  375. AND LOGIN_LDT < DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
  376. ;
  377. -- 회원통계 > 회원활동현황 > 마케팅수신동의현황
  378. -- SMS
  379. SELECT
  380. X.*
  381. , ROUND(CNT_4 / TOT_CNT * 100) AS PER_CNT_4
  382. , ROUND(CNT_3 / TOT_CNT * 100) AS PER_CNT_3
  383. , ROUND(CNT_2 / TOT_CNT * 100) AS PER_CNT_2
  384. , ROUND(CNT_1 / TOT_CNT * 100) AS PER_CNT_1
  385. FROM (
  386. SELECT SUM(CASE WHEN GB = 4 THEN CNT ELSE 0 END) AS CNT_4
  387. , SUM(CASE WHEN GB = 3 THEN CNT ELSE 0 END) AS CNT_3
  388. , SUM(CASE WHEN GB = 2 THEN CNT ELSE 0 END) AS CNT_2
  389. , SUM(CASE WHEN GB = 1 THEN CNT ELSE 0 END) AS CNT_1
  390. , SUM(CNT) AS TOT_CNT
  391. FROM (
  392. SELECT COUNT(1) AS CNT
  393. , 4 AS GB
  394. FROM TB_CUSTOMER
  395. WHERE CUST_NO > 0
  396. AND CUST_STAT = 'G104_10'
  397. AND SMS_AGREE_YN = 'Y'
  398. -- EMAIL
  399. UNION ALL
  400. SELECT COUNT(1) AS CNT
  401. , 3 AS GB
  402. FROM TB_CUSTOMER
  403. WHERE CUST_NO > 0
  404. AND CUST_STAT = 'G104_10'
  405. AND EMAIL_AGREE_YN = 'Y'
  406. -- 푸쉬
  407. UNION ALL
  408. SELECT COUNT(1) AS CNT
  409. , 2 AS GB
  410. FROM TB_CUSTOMER
  411. WHERE CUST_NO > 0
  412. AND CUST_STAT = 'G104_10'
  413. AND APP_AGREE_YN = 'Y'
  414. -- 미동의
  415. UNION ALL
  416. SELECT COUNT(1) AS CNT
  417. , 1 AS GB
  418. FROM TB_CUSTOMER
  419. WHERE CUST_NO > 0
  420. AND CUST_STAT = 'G104_10'
  421. AND SMS_AGREE_YN = 'N'
  422. AND EMAIL_AGREE_YN = 'N'
  423. AND APP_AGREE_YN = 'N'
  424. ) Z
  425. ) X
  426. ;
  427. -- 회원통계 > 회원활동현황 > 휴면전환 잔여일별현황
  428. SELECT
  429. SUM(CASE WHEN GB = 4 THEN CNT ELSE 0 END) AS CNT_4 -- 12개월
  430. , SUM(CASE WHEN GB = 3 THEN CNT ELSE 0 END) AS CNT_3 -- 9개월
  431. , SUM(CASE WHEN GB = 2 THEN CNT ELSE 0 END) AS CNT_2 -- 6개월
  432. , SUM(CASE WHEN GB = 1 THEN CNT ELSE 0 END) AS CNT_1 -- 9개월
  433. FROM (
  434. -- 12개월
  435. SELECT COUNT(1) AS CNT
  436. , 4 AS GB -- 12개월
  437. FROM TB_CUSTOMER
  438. WHERE CUST_NO > 0
  439. AND CUST_STAT = 'G104_10'
  440. AND LOGIN_LDT > DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 DAY ), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
  441. -- 9개월
  442. UNION ALL
  443. SELECT COUNT(1) AS CNT
  444. , 3 AS GB -- 9개월
  445. FROM TB_CUSTOMER
  446. WHERE CUST_NO > 0
  447. AND CUST_STAT = 'G104_10'
  448. AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
  449. AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 DAY ), '%Y%m%d%H%i%s')
  450. -- 6개월
  451. UNION ALL
  452. SELECT COUNT(1) AS CNT
  453. , 2 AS GB -- 6개월
  454. FROM TB_CUSTOMER
  455. WHERE CUST_NO > 0
  456. AND CUST_STAT = 'G104_10'
  457. AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
  458. AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
  459. -- 3개월
  460. UNION ALL
  461. SELECT COUNT(1) AS CNT
  462. , 1 AS GB -- ~3개월
  463. FROM TB_CUSTOMER
  464. WHERE CUST_NO > 0
  465. AND CUST_STAT = 'G104_10'
  466. AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
  467. AND LOGIN_LDT < DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
  468. ) Z
  469. ;