검색_상품색인.sql 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. DROP TABLE TB_SEARCH_ENGINE;
  2. CREATE TABLE TB_SEARCH_ENGINE AS
  3. WITH TAB_GOODS AS (
  4. SELECT G.GOODS_CD
  5. , G.GOODS_NM
  6. , G.GOODS_TNM
  7. , G.GOODS_GB
  8. , G.FOREIGN_BUY_YN
  9. , G.PARALLEL_IMPORT_YN
  10. , G.ORDER_MADE_YN
  11. , G.GOODS_SNM
  12. , G.BRAND_CD
  13. , G.ITEMKIND_CD
  14. , G.FORMAL_GB
  15. , G.LIST_PRICE
  16. , G.CURR_PRICE
  17. , G.SELF_GOODS_YN
  18. , G.GOODS_STAT
  19. , G.PNT_PRATE
  20. , G.PRE_PPNT_USABLE_YN
  21. , G.PNT_MRATE
  22. , G.PRE_MPNT_USABLE_YN
  23. , G.MIN_ORD_QTY
  24. , G.MAX_ORD_QTY
  25. , G.DAY_MAX_ORD_QTY
  26. , G.SEX_GB
  27. , G.MAIN_COLOR_CD
  28. , G.SUPPLY_COMP_CD
  29. , G.SELF_MALL_YN
  30. , G.AGE_GRP_CD
  31. , G.SEASON_CD
  32. , G.GOODS_TYPE
  33. , G.REG_DT AS REG_DT
  34. , (CASE WHEN BG.DISP_NM_LANG = 'EN' THEN BG.BRAND_GROUP_ENM ELSE BG.BRAND_GROUP_KNM END) AS BRAND_GROUP_NM
  35. , BG.BRAND_GROUP_NO
  36. , E.DELV_FEE
  37. , E.MIN_ORD_AMT
  38. , GS.SELL_WEEK_QTY AS ORDER_CNT
  39. , GS.REVIEW_REG_CNT AS REVIEW_CNT
  40. , I.SIZE_GB
  41. , CASE WHEN I.SIZE_GB = 'T' THEN '상의'
  42. WHEN I.SIZE_GB = 'B' THEN '하의'
  43. WHEN I.SIZE_GB = 'S' THEN '신발'
  44. ELSE NULL
  45. END AS SIZE_GB_NM
  46. , (CASE WHEN G.SELF_GOODS_YN ='Y' AND ifnull(QDS.GOODS_CD, 'Y') THEN 'Y' ELSE 'N' END ) AS QUIK_DELV_YN
  47. FROM TB_GOODS G
  48. INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
  49. AND B.USE_YN = 'Y'
  50. INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
  51. AND BG.USE_YN = 'Y'
  52. INNER JOIN TB_DELV_FEE_POLICY E ON G.SUPPLY_COMP_CD = E.SUPPLY_COMP_CD
  53. AND G.DELV_FEE_CD = E.DELV_FEE_CD
  54. INNER JOIN TB_GOODS_SUMMARY GS ON G.GOODS_CD = GS.GOODS_CD
  55. INNER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
  56. -- LEFT OUTER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
  57. LEFT OUTER JOIN TB_GOODS_SHOT_DELV_SKIP QDS ON G.GOODS_CD = QDS.GOODS_CD
  58. WHERE G.SELF_MALL_YN = 'Y' -- 자사몰 노출(기획전과 상품상세는 노출)
  59. -- AND G.GOODS_STAT = 'G008_90'
  60. -- AND G.GOODS_CD IN ('14373685','14373686','14373687','14373688','14373690','14373697','14373699' , '10770554','10770563','10770569','10770570' , 'AMM11QTS36')
  61. )
  62. -- SELECT * FROM TAB_GOODS ; -- 25075
  63. , TAB_OPT_SIZE AS (
  64. /*옵션 사이즈 목록 조회*/
  65. /*자사상품*/
  66. SELECT G.GOODS_CD
  67. -- , O.OPT_CD
  68. , O.OPT_CD1
  69. , C.COLOR_FILE /*RGB값*/
  70. , GROUP_CONCAT(CONCAT(O.OPT_CD2,'|',O.SOLDOUT_YN,'|',VS.CURR_STOCK_QTY)) AS SIZE_INFO
  71. FROM TAB_GOODS G
  72. , TB_OPTION O
  73. , TB_COLOR C
  74. , VW_STOCK VS
  75. WHERE G.GOODS_CD = O.GOODS_CD
  76. AND O.OPT_CD1 = C.COLOR_CD
  77. AND O.GOODS_CD = VS.GOODS_CD
  78. AND O.OPT_CD = VS.OPT_CD
  79. AND G.SELF_GOODS_YN = 'Y' /*자사상품*/
  80. AND O.DISP_YN = 'Y'
  81. AND C.USE_YN = 'Y'
  82. GROUP BY G.GOODS_CD, O.OPT_CD1, C.COLOR_FILE
  83. UNION ALL
  84. /*입점상품*/
  85. SELECT G.GOODS_CD
  86. -- , O.OPT_CD
  87. , G.MAIN_COLOR_CD AS OPT_CD1
  88. , NULL AS COLOR_FILE /*RGB값*/
  89. , GROUP_CONCAT(CONCAT(O.OPT_CD2,'|',O.SOLDOUT_YN,'|',VS.CURR_STOCK_QTY)) AS SIZE_INFO
  90. FROM TAB_GOODS G
  91. , TB_OPTION O
  92. , VW_STOCK VS
  93. WHERE G.GOODS_CD = O.GOODS_CD
  94. AND O.GOODS_CD = VS.GOODS_CD
  95. AND O.OPT_CD = VS.OPT_CD
  96. AND G.SELF_GOODS_YN = 'N' /*입점상품*/
  97. AND O.DISP_YN = 'Y'
  98. GROUP BY G.GOODS_CD,G.MAIN_COLOR_CD
  99. )
  100. -- SELECT * FROM TAB_OPT_SIZE;
  101. , TAB_OPT AS (
  102. /*옵션 목록*/
  103. SELECT OS.GOODS_CD
  104. , OS.OPT_CD1
  105. , GROUP_CONCAT(OS.SIZE_INFO ORDER BY OS.SIZE_INFO) AS SIZES
  106. FROM TAB_OPT_SIZE OS
  107. GROUP BY OS.GOODS_CD, OS.OPT_CD1
  108. )
  109. -- SELECT * FROM TAB_OPT;
  110. , TAB_AD_KEYWORD AS (
  111. /* 상품별 키워드 목록*/
  112. SELECT AKG.GOODS_CD
  113. , GROUP_CONCAT(AK.AD_KEYWORD) AS AD_KEYWORD
  114. FROM TB_AD_KEYWORD AK
  115. INNER JOIN TB_AD_KEYWORD_GOODS AKG ON AK.AD_KEYWORD_SQ = AKG.AD_KEYWORD_SQ
  116. INNER JOIN TAB_GOODS G ON AKG.GOODS_CD = G.GOODS_CD
  117. WHERE NOW() BETWEEN AK.AD_KEYWORD_STDT AND AK.AD_KEYWORD_EDDT
  118. AND AK.USE_YN = 'Y'
  119. GROUP BY AKG.GOODS_CD
  120. )
  121. , TAB_GOODS_VIDEO AS (
  122. SELECT MAX(GOODS_CD) AS GOODS_CD
  123. , MAX(CASE WHEN RNUM = 1 THEN VIDEO_GB END) AS VIDEO_GB_M
  124. , MAX(CASE WHEN RNUM = 1 THEN VIDEO_VAL END) AS VIDEO_VAL_M
  125. , MAX(CASE WHEN RNUM = 2 THEN VIDEO_GB END) AS VIDEO_GB_S
  126. , MAX(CASE WHEN RNUM = 2 THEN VIDEO_VAL END) AS VIDEO_VAL_S
  127. FROM (
  128. SELECT A.DISPLOC_VAL AS GOODS_CD
  129. , B.VIDEO_GB
  130. , B.VIDEO_VAL
  131. , A.REG_DT
  132. , RANK() OVER(PARTITION BY A.DISPLOC_VAL ORDER BY A.REG_DT ) RNUM
  133. FROM TB_VIDEO_DISPLOC A
  134. INNER JOIN TB_VIDEO B ON A.VIDEO_SQ = B.VIDEO_SQ
  135. AND B.DISP_YN ='Y'
  136. INNER JOIN TAB_GOODS G ON A.DISPLOC_VAL = G.GOODS_CD
  137. WHERE A.DISPLOC_GB ='G'
  138. AND A.DISP_YN = 'Y'
  139. ) Z
  140. )
  141. , TAB_CPN_ICON AS (
  142. /*상품별 쿠폰 아이콘 목록*/
  143. SELECT G.GOODS_CD
  144. , GBP.PC_CURR_PRICE
  145. , GBP.MO_CURR_PRICE
  146. , GBP.APP_CURR_PRICE
  147. -- , FN_IS_GOODS_COUPON('P',G.GOODS_CD,ifnull(GBP.PC_CURR_PRICE, G.CURR_PRICE, 'G100_10')) AS CPN_PC_ICON -- 속도 이슈 일반:G100_10, 임직원:G100_20
  148. -- , FN_IS_GOODS_COUPON('M',G.GOODS_CD,ifnull(GBP.PC_CURR_PRICE, G.CURR_PRICE, 'G100_10')) AS CPN_MO_ICON
  149. -- , FN_IS_GOODS_COUPON('A',G.GOODS_CD,ifnull(GBP.PC_CURR_PRICE, G.CURR_PRICE, 'G100_10')) AS CPN_APP_ICON
  150. , FN_GET_FREEGIFT_GOODS_YN(G.GOODS_CD) AS FREEGIFT_ICON
  151. FROM TAB_GOODS G
  152. LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GBP ON G.GOODS_CD = GBP.GOODS_CD
  153. AND GBP.CUST_GB = 'G100_00'
  154. )
  155. -- SELECT COUNT(*) FROM (
  156. SELECT G.*
  157. , O.OPT_CD1 AS COLOR_CD
  158. , O.SIZES
  159. -- , CI.CPN_PC_ICON
  160. -- , CI.CPN_MO_ICON
  161. -- , CI.CPN_APP_ICON
  162. , '' AS CPN_PC_ICON
  163. , '' AS CPN_MO_ICON
  164. , '' AS CPN_APP_ICON
  165. , CI.FREEGIFT_ICON
  166. , AK.AD_KEYWORD
  167. , GV.VIDEO_GB_M
  168. , GV.VIDEO_VAL_M
  169. , GV.VIDEO_GB_S
  170. , GV.VIDEO_VAL_S
  171. , FN_GET_CODE_NM('G073',G.GOODS_GB) AS GOODS_GB_NM
  172. , FN_GET_CODE_NM('G007',G.SEX_GB) AS SEX_NM
  173. , FN_GET_CODE_NM('G023',G.AGE_GRP_CD) AGE_GRP_NM
  174. , FN_GET_CODE_NM('G006',G.SEASON_CD) SEASON_NM
  175. FROM TAB_GOODS G
  176. INNER JOIN TAB_CPN_ICON CI ON G.GOODS_CD = CI.GOODS_CD
  177. LEFT OUTER JOIN TAB_OPT O ON G.GOODS_CD = O.GOODS_CD
  178. LEFT OUTER JOIN TAB_AD_KEYWORD AK ON G.GOODS_CD = AK.GOODS_CD
  179. LEFT OUTER JOIN TAB_GOODS_VIDEO GV ON G.GOODS_CD = GV.GOODS_CD
  180. -- AND G.SELF_GOODS_YN = 'Y'
  181. -- AND G.GOODS_CD = '14373685'
  182. -- ) A
  183. ;