네이버EP생성_20210614.sql 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. SET GROUP_CONCAT_MAX_LEN = 150000;
  2. -- 상품 이미지 정보 생성 (~30초. 1,645,082건)
  3. DROP TABLE TMP_EP_GOODS_IMG;
  4. CREATE TABLE TMP_EP_GOODS_IMG AS
  5. SELECT G.GOODS_CD
  6. , MIN(CONCAT('https://image.istyle24.com/Upload/ProductImage/',GI.SYS_IMG_NM)) AS IMAGE_LINK
  7. FROM TB_GOODS G
  8. , TB_GOODS_IMG GI
  9. WHERE G.GOODS_CD = GI.GOODS_CD
  10. AND IF(G.SELF_GOODS_YN = 'N','XX',G.MAIN_COLOR_CD) = GI.COLOR_CD
  11. AND GI.DEFAULT_IMG_YN = 'Y'
  12. -- AND G.GOODS_CD = 'A91M-SH121A'
  13. GROUP BY G.GOODS_CD
  14. ;
  15. SELECT COUNT(*) FROM TMP_EP_GOODS_IMG;
  16. -- 상품 추가이미지 정보 생성 (~16초. 674,937건)
  17. DROP TABLE TMP_EP_GOODS_ADD_IMG;
  18. CREATE TABLE TMP_EP_GOODS_ADD_IMG AS
  19. SELECT GOODS_CD
  20. , GROUP_CONCAT(CONCAT('https://image.istyle24.com/Upload/ProductImage/',SYS_IMG_NM) SEPARATOR '|') AS ADD_IMAGE_LINK
  21. FROM (SELECT DISTINCT
  22. GOODS_CD
  23. , SYS_IMG_NM
  24. FROM TB_GOODS_IMG
  25. WHERE DEFAULT_IMG_YN = 'N'
  26. GROUP BY GOODS_CD, SYS_IMG_NM
  27. HAVING COUNT(*) <= 4
  28. ) Z
  29. GROUP BY GOODS_CD
  30. ;
  31. SELECT COUNT(*) FROM TMP_EP_GOODS_ADD_IMG;
  32. -- 카드이벤트 정보 생성 (~1초, 541건)
  33. DROP TABLE TMP_EP_CARD_EVENT;
  34. -- CREATE TABLE TMP_EP_CARD_EVENT AS
  35. -- SELECT CPC.MIN_PAY_AMT
  36. -- , GROUP_CONCAT(DISTINCT
  37. -- CONCAT(FN_GET_CODE_NM('G941',CPT.PRMT_TARGET_CD),'^',
  38. -- CPC.MIN_NO_ITRT,'~',CPC.MAX_NO_ITRT)
  39. -- SEPARATOR '|') AS CARD_EVENT
  40. -- FROM TB_CARD_PROMOTION CP
  41. -- , TB_CARD_PROMOTION_CONDITION CPC
  42. -- , TB_CARD_PROMOTION_TARGET CPT
  43. -- WHERE CP.CARD_PRMT_SQ = CPC.CARD_PRMT_SQ
  44. -- AND CPC.CARD_PRMT_CDT_SQ = CPT.CARD_PRMT_CDT_SQ
  45. -- AND CP.PRMT_GB = 'B' /*무이자할부*/
  46. -- AND CP.PRMT_STD <= DATE_FORMAT(CURRENT_DATE(),'%Y%m%d')
  47. -- AND CP.PRMT_EDD >= DATE_FORMAT(CURRENT_DATE(),'%Y%m%d')
  48. -- AND CP.DISP_YN = 'Y'
  49. -- GROUP BY CPC.MIN_PAY_AMT
  50. -- ;
  51. CREATE TABLE TMP_EP_CARD_EVENT AS
  52. SELECT G.GOODS_CD
  53. , GROUP_CONCAT(DISTINCT
  54. CONCAT(FN_GET_CODE_NM('G941',CPT.PRMT_TARGET_CD),'^',
  55. (G.CURR_PRICE
  56. -
  57. CASE WHEN CPC.DC_WAY = 'G240_10' /*정액할인*/ THEN CPC.DC_VAL
  58. ELSE /*정율할인*/ CAST(G.CURR_PRICE * CPC.DC_VAL / 100 AS SIGNED INTEGER)
  59. END))
  60. SEPARATOR '|') AS CARD_EVENT
  61. FROM TB_CARD_PROMOTION CP
  62. , TB_CARD_PROMOTION_CONDITION CPC
  63. , TB_CARD_PROMOTION_TARGET CPT
  64. , (
  65. SELECT G.GOODS_CD
  66. , IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE) * G.MIN_ORD_QTY AS CURR_PRICE
  67. FROM TB_GOODS G
  68. , TB_GOODS_BENEFIT_PRICE GBP
  69. WHERE G.GOODS_CD = GBP.GOODS_CD
  70. ) G
  71. WHERE CP.CARD_PRMT_SQ = CPC.CARD_PRMT_SQ
  72. AND CPC.CARD_PRMT_CDT_SQ = CPT.CARD_PRMT_CDT_SQ
  73. AND CP.PRMT_GB = 'A' /*카드할인*/
  74. AND CP.DC_GB = '1' /*즉시할인*/
  75. AND CP.PRMT_STD <= DATE_FORMAT(CURRENT_DATE(),'%Y%m%d')
  76. AND CP.PRMT_EDD >= DATE_FORMAT(CURRENT_DATE(),'%Y%m%d')
  77. AND CP.DISP_YN = 'Y'
  78. AND CPC.MIN_PAY_AMT < G.CURR_PRICE
  79. GROUP BY G.GOODS_CD
  80. ;
  81. SELECT COUNT(*) FROM TMP_EP_CARD_EVENT;
  82. -- 쿠폰 정보 생성 (~1초. 4건)
  83. DROP TABLE TMP_EP_COUPON;
  84. CREATE TABLE TMP_EP_COUPON AS
  85. SELECT GOODS_CD
  86. , CONCAT(IFNULL(NORMAL_CPN,''),'^',IFNULL(AFLINK_CPN,'')) AS COUPON
  87. FROM (
  88. SELECT CR.REF_VAL AS GOODS_CD
  89. , CASE WHEN IFNULL((SELECT COUNT(*)
  90. FROM TB_COUPON_AF_CHANNEL
  91. WHERE CPN_ID = C.CPN_ID
  92. ),0) = 0 THEN
  93. CONCAT(C.DC_PVAL,CASE WHEN C.DC_WAY = 'G240_10' THEN '원' ELSE '%' END)
  94. ELSE
  95. NULL
  96. END AS NORMAL_CPN /*일반쿠폰*/
  97. , CASE WHEN IFNULL((SELECT COUNT(*)
  98. FROM TB_COUPON_AF_CHANNEL
  99. WHERE CPN_ID = C.CPN_ID
  100. ),0) > 0 AND C.DC_WAY = 'G240_11' THEN
  101. C.DC_PVAL
  102. ELSE
  103. NULL
  104. END AS AFLINK_CPN /*제휴쿠폰*/
  105. , CASE WHEN IFNULL((SELECT COUNT(*)
  106. FROM TB_COUPON_AF_CHANNEL
  107. WHERE CPN_ID = C.CPN_ID
  108. ),0) = 0 THEN
  109. CASE WHEN C.DC_WAY = 'G240_10' THEN C.DC_PVAL
  110. ELSE IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE) * G.MIN_ORD_QTY * C.DC_PVAL / 100
  111. END
  112. ELSE
  113. 0
  114. END AS NCPN_DC_AMT /*일반쿠폰할인금액*/
  115. , CASE WHEN IFNULL((SELECT COUNT(*)
  116. FROM TB_COUPON_AF_CHANNEL
  117. WHERE CPN_ID = C.CPN_ID
  118. ),0) > 0 AND C.DC_WAY = 'G240_11' THEN
  119. IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE) * G.MIN_ORD_QTY * C.DC_PVAL / 100
  120. ELSE
  121. 0
  122. END AS ACPN_DC_AMT /*제휴쿠폰할인금액*/
  123. , RANK() OVER(PARTITION BY CR.REF_VAL
  124. ORDER BY (CASE WHEN IFNULL((SELECT COUNT(*)
  125. FROM TB_COUPON_AF_CHANNEL
  126. WHERE CPN_ID = C.CPN_ID
  127. ),0) = 0 THEN
  128. CASE WHEN C.DC_WAY = 'G240_10' THEN C.DC_PVAL
  129. ELSE IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE) * G.MIN_ORD_QTY * C.DC_PVAL / 100
  130. END
  131. ELSE
  132. 0
  133. END) DESC,
  134. (CASE WHEN IFNULL((SELECT COUNT(*)
  135. FROM TB_COUPON_AF_CHANNEL
  136. WHERE CPN_ID = C.CPN_ID
  137. ),0) > 0 AND C.DC_WAY = 'G240_11' THEN
  138. IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE) * G.MIN_ORD_QTY * C.DC_PVAL / 100
  139. ELSE
  140. 0
  141. END) DESC
  142. ) AS RK
  143. FROM TB_COUPON C
  144. INNER JOIN TB_COUPON_REFVAL CR ON C.CPN_ID = CR.CPN_ID
  145. INNER JOIN TB_GOODS G ON CR.REF_VAL = G.GOODS_CD
  146. LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON G.GOODS_CD = GBP.GOODS_CD
  147. WHERE C.SITE_CD = 'G000_10'
  148. AND C.CPN_STAT = 'G232_11' /*진행쿠폰*/
  149. AND C.CPN_TYPE IN ('G230_11','G230_20') /*상품쿠폰,주문서쿠폰*/
  150. AND (
  151. (C.PD_GB = 'D' AND NOW() < DATE_ADD(NOW(), INTERVAL C.AVAIL_DAYS DAY))
  152. OR
  153. (C.PD_GB = 'P' AND NOW() BETWEEN C.AVAIL_STDT AND C.AVAIL_EDDT)
  154. )
  155. AND C.APPLY_SCOPE = 'I' /*개별쿠폰*/
  156. AND CR.CPN_TYPE IN ('G230_11','G230_20') /*상품쿠폰,주문서쿠폰*/
  157. AND CR.CPN_TARGET = 'G260_10' /*상품쿠폰*/
  158. AND CR.DEL_YN = 'N'
  159. AND NOT EXISTS (SELECT 1
  160. FROM TB_COUPON_REFVAL
  161. WHERE CPN_ID = CR.CPN_ID
  162. AND CPN_TARGET = 'G260_14' /*제외상품*/
  163. AND REF_VAL = CR.REF_VAL
  164. AND DEL_YN = 'N'
  165. )
  166. ) Z
  167. WHERE 1 = 1
  168. -- AND GOODS_CD = 'M211BLB35P'
  169. AND RK = 1
  170. ;
  171. SELECT COUNT(*) FROM TMP_EP_COUPON;
  172. -- 무이자이벤트 정보 생성 (~1초. 541건)
  173. DROP TABLE TMP_EP_INTEREST_FREE_EVENT;
  174. CREATE TABLE TMP_EP_INTEREST_FREE_EVENT AS
  175. SELECT G.GOODS_CD
  176. , GROUP_CONCAT(DISTINCT
  177. CONCAT(FN_GET_CODE_NM('G941',CPT.PRMT_TARGET_CD),'^',
  178. CPC.MIN_NO_ITRT,'~',CPC.MAX_NO_ITRT)
  179. SEPARATOR '|') AS INTEREST_FREE_EVENT /*무이자이벤트. 판매가 > 무이자할부 최소구매금액 기준 초과 시 노출. 카드명^개월수~개월수|카드명^개월수~개월수... 형식으로 노출*/
  180. FROM TB_CARD_PROMOTION CP
  181. , TB_CARD_PROMOTION_CONDITION CPC
  182. , TB_CARD_PROMOTION_TARGET CPT
  183. , (
  184. SELECT G.GOODS_CD
  185. , IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE) * G.MIN_ORD_QTY AS CURR_PRICE
  186. FROM TB_GOODS G
  187. , TB_GOODS_BENEFIT_PRICE GBP
  188. WHERE G.GOODS_CD = GBP.GOODS_CD
  189. ) G
  190. WHERE CP.CARD_PRMT_SQ = CPC.CARD_PRMT_SQ
  191. AND CPC.CARD_PRMT_CDT_SQ = CPT.CARD_PRMT_CDT_SQ
  192. AND CP.PRMT_GB = 'B' /*무이자할부*/
  193. AND CP.PRMT_STD <= DATE_FORMAT(CURRENT_DATE(),'%Y%m%d')
  194. AND CP.PRMT_EDD >= DATE_FORMAT(CURRENT_DATE(),'%Y%m%d')
  195. AND CP.DISP_YN = 'Y'
  196. AND CPC.MIN_PAY_AMT < G.CURR_PRICE
  197. GROUP BY G.GOODS_CD
  198. ;
  199. SELECT COUNT(*) FROM TMP_EP_INTEREST_FREE_EVENT;
  200. -- EP네이버 생성 (~1분 40초. 1,025,330건)
  201. DROP TABLE TMP_EP_NAVER;
  202. CREATE TABLE TMP_EP_NAVER AS
  203. SELECT G.GOODS_CD AS ID
  204. , CONCAT('[',CASE WHEN B.DISP_NM_LANG = 'EN' THEN B.BRAND_ENM ELSE B.BRAND_KNM END,'] ',
  205. G.GOODS_NM,
  206. IFNULL(G.GOODS_NUM,'')) AS TITLE
  207. , IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE) * G.MIN_ORD_QTY AS PRICE_PC /*즉시할인이적용된가격*/
  208. , IFNULL(GBP.MO_CURR_PRICE,G.CURR_PRICE) * G.MIN_ORD_QTY AS PRICE_MOBILE /*즉시할인이적용된가격*/
  209. , G.LIST_PRICE AS NORMAL_PRICE /*정상가*/
  210. , G.GOODS_STAT
  211. , CONCAT('https://www.style24.com/goods/detail/form?goodsCd=',
  212. G.GOODS_CD) AS LINK
  213. , NULL AS MOBILE_LINK /*PC URL과 다를 경우. 동일함으로 NULL로 처리*/
  214. , GI.IMAGE_LINK
  215. , GAI.ADD_IMAGE_LINK /*이미지4개까지(|로 구분)*/
  216. , SUBSTRING_INDEX(I.ITEMKIND_NM,'>',1) AS CATEGORY_NAME1
  217. , CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(I.ITEMKIND_NM,'>',1),'>',-1) = SUBSTRING_INDEX(SUBSTRING_INDEX(I.ITEMKIND_NM,'>',2),'>',-1) THEN
  218. NULL
  219. ELSE
  220. SUBSTRING_INDEX(SUBSTRING_INDEX(I.ITEMKIND_NM,'>',2),'>',-1)
  221. END AS CATEGORY_NAME2
  222. , CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(I.ITEMKIND_NM,'>',2),'>',-1) = SUBSTRING_INDEX(SUBSTRING_INDEX(I.ITEMKIND_NM,'>',3),'>',-1) THEN
  223. NULL
  224. ELSE
  225. SUBSTRING_INDEX(SUBSTRING_INDEX(I.ITEMKIND_NM,'>',3),'>',-1)
  226. END AS CATEGORY_NAME3
  227. , CASE WHEN SUBSTRING_INDEX(SUBSTRING_INDEX(I.ITEMKIND_NM,'>',3),'>',-1) = SUBSTRING_INDEX(SUBSTRING_INDEX(I.ITEMKIND_NM,'>',4),'>',-1) THEN
  228. NULL
  229. ELSE
  230. SUBSTRING_INDEX(SUBSTRING_INDEX(I.ITEMKIND_NM,'>',4),'>',-1)
  231. END AS CATEGORY_NAME4
  232. -- , NULL AS NAVER_PRODUCT_ID
  233. -- , FN_GET_CODE_NM('G073',G.GOODS_GB) AS CONDITION1
  234. , CC1.CD_NM AS CONDITION1
  235. , G.FOREIGN_BUY_YN AS IMPORT_FLAG /*해외구매대행여부*/
  236. , G.PARALLEL_IMPORT_YN AS PARALLEL_IMPORT /*병행수입여부*/
  237. , G.ORDER_MADE_YN AS ORDER_MADE /*주문제작상품여부*/
  238. , IF(GRS.GOODS_CD IS NULL,NULL,'예약판매') AS PRODUCT_FLAG /*예약판매*/
  239. , G.ADULT_YN AS ADULT /*성인여부*/
  240. , G.GOODS_NUM AS MANUFACTURE_DEFINE_NUMBER /*제조번호*/
  241. , IF(B.DISP_NM_LANG = 'EN',B.BRAND_ENM,B.BRAND_KNM) AS BRAND /*브랜드명*/
  242. -- , (SELECT NI_CONTENT
  243. -- FROM TB_GOODS_NOTI_INFO
  244. -- WHERE GOODS_CD = G.GOODS_CD
  245. -- AND NI_ITEM_CD = 'G005_005'
  246. -- LIMIT 1) AS MAKER /*제조사*/
  247. -- , IFNULL(FN_GET_CODE_NM('G076',G.ORIGIN_CD),G.ORIGIN_CD) AS ORIGIN /*원산지*/
  248. , CC2.CD_NM AS ORIGIN /*원산지*/
  249. , CE.CARD_EVENT /*카드행사. 카드즉시할인 등록된 기준으로 적용. 카드명^카드적용가 형식*/
  250. , G.GOODS_TNM AS EVENT_WORDS /*상품셀링문구*/
  251. , TEC.COUPON
  252. , IFE.INTEREST_FREE_EVENT /*무이자이벤트. 판매가 > 무이자할부 최소구매금액 기준 초과 시 노출. 카드명^개월수~개월수|카드명^개월수~개월수... 형식으로 노출*/
  253. , CONCAT('스타일포인트','^',
  254. CAST(IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE) * G.MIN_ORD_QTY * G.PNT_PRATE AS SIGNED INTEGER)
  255. ) AS PNT /*포인트. 스타일포인트^포인트금액 형식으로 표기*/
  256. , CONCAT(IFNULL(G.GOODS_SNM,''),
  257. CASE WHEN LENGTH(IFNULL(G.GOODS_SNM1,'')) = 0 THEN
  258. ''
  259. ELSE
  260. '|'
  261. END,
  262. IFNULL(G.GOODS_SNM1,'')
  263. ) AS SEARCH_TAG
  264. , CASE WHEN G.MIN_ORD_QTY > 0 THEN
  265. G.MIN_ORD_QTY
  266. ELSE
  267. ''
  268. END AS MINIMUM_PURCHASE_QUANTITY
  269. , IFNULL(GS.REVIEW_REG_CNT,0) AS REVIEW_REG_CNT
  270. , IFNULL(CASE WHEN DFP.DELV_FEE_CRITE = 'G078_20' /*무료*/ THEN
  271. 0
  272. ELSE /*조건부무료 또는 유료*/
  273. CASE WHEN DFP.MIN_ORD_AMT <= IFNULL(GBP.PC_CURR_PRICE,G.CURR_PRICE) * G.MIN_ORD_QTY THEN
  274. 0
  275. ELSE
  276. DFP.DELV_FEE
  277. END
  278. END,0) AS SHIPPING
  279. , CASE WHEN SUBSTRING(I.ITEMKIND_CD,1,2) = '07' THEN '유아'
  280. WHEN SUBSTRING(I.ITEMKIND_CD,1,2) IN ('08','09','10') THEN '아동'
  281. WHEN SUBSTRING(I.ITEMKIND_CD,1,2) IN ('11','12','13') THEN '청소년'
  282. ELSE '성인'
  283. END AS AGE_GROUP
  284. , CASE WHEN G.SEX_GB = 'G007_F' THEN '여성'
  285. WHEN G.SEX_GB = 'G007_M' THEN '남성'
  286. ELSE '남여공용'
  287. END AS GENDER
  288. , 'I' AS CLASS /*전체색인:I, 부분색인:전체색인 데이터랑 비교해서 없으면 I, 있는데 변경되었으면 U, 품절: D)*/
  289. , DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%S') AS UPDATE_TIME
  290. FROM TB_GOODS G
  291. INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
  292. INNER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
  293. INNER JOIN TB_DELV_FEE_POLICY DFP ON G.DELV_FEE_CD = DFP.DELV_FEE_CD
  294. LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON G.GOODS_CD = GBP.GOODS_CD
  295. LEFT OUTER JOIN TB_GOODS_SUMMARY GS ON G.GOODS_CD = GS.GOODS_CD
  296. LEFT OUTER JOIN TMP_EP_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
  297. LEFT OUTER JOIN TMP_EP_GOODS_ADD_IMG GAI ON G.GOODS_CD = GAI.GOODS_CD
  298. LEFT OUTER JOIN TB_GOODS_RES_SELL GRS ON G.GOODS_CD = GRS.GOODS_CD
  299. AND GRS.DELV_RES_DT >= NOW()
  300. AND GRS.USE_YN = 'Y'
  301. LEFT OUTER JOIN TMP_EP_CARD_EVENT CE ON G.GOODS_CD = CE.GOODS_CD
  302. LEFT OUTER JOIN TMP_EP_COUPON TEC ON G.GOODS_CD = TEC.GOODS_CD
  303. LEFT OUTER JOIN TMP_EP_INTEREST_FREE_EVENT IFE ON G.GOODS_CD = IFE.GOODS_CD
  304. LEFT OUTER JOIN TB_COMMON_CODE CC1 ON G.GOODS_GB = CC1.CD
  305. AND CC1.CD_GB = 'G073'
  306. LEFT OUTER JOIN TB_COMMON_CODE CC2 ON G.ORIGIN_CD = CC2.CD
  307. AND CC2.CD_GB = 'G076'
  308. WHERE G.GOODS_STAT = 'G008_90' /*승인완료상품*/
  309. AND G.SELF_MALL_YN = 'Y' /*몰노출상품*/
  310. AND G.SELL_STDT <= NOW() /*유효한 판매기간*/
  311. AND G.SELL_EDDT >= NOW() /*유효한 판매기간*/
  312. AND G.ADULT_YN = 'N' /*성인상품아닌넘만*/
  313. ;
  314. SELECT COUNT(*) FROM TMP_EP_NAVER;
  315. -- SELECT ID, COUNT(*) AS CNT
  316. -- FROM TMP_EP_NAVER Z
  317. -- GROUP BY ID
  318. -- HAVING COUNT(*) > 1
  319. -- ;
  320. --
  321. -- SELECT *
  322. -- FROM TMP_EP_NAVER
  323. -- WHERE ID IN (
  324. -- 'A91M-SH121A',
  325. -- 'F99U-TS971B',
  326. -- 'F75A-MM92ZA',
  327. -- 'B195Z5210P',
  328. -- 'F75U-TS94ZA',
  329. -- 'F71M-CP02ZA',
  330. -- 'O174TS001P',
  331. -- 'F75M-DP942B',
  332. -- 'F71U-TS18ZA',
  333. -- 'F65M-DP909A'
  334. -- )
  335. -- ORDER BY ID
  336. -- ;