네이버EP생성.sql 17 KB

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