1
0

q49.sql 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. SELECT
  2. 'web' AS channel,
  3. web.item,
  4. web.return_ratio,
  5. web.return_rank,
  6. web.currency_rank
  7. FROM (
  8. SELECT
  9. item,
  10. return_ratio,
  11. currency_ratio,
  12. rank()
  13. OVER (
  14. ORDER BY return_ratio) AS return_rank,
  15. rank()
  16. OVER (
  17. ORDER BY currency_ratio) AS currency_rank
  18. FROM
  19. (SELECT
  20. ws.ws_item_sk AS item,
  21. (cast(sum(coalesce(wr.wr_return_quantity, 0)) AS DECIMAL(15, 4)) /
  22. cast(sum(coalesce(ws.ws_quantity, 0)) AS DECIMAL(15, 4))) AS return_ratio,
  23. (cast(sum(coalesce(wr.wr_return_amt, 0)) AS DECIMAL(15, 4)) /
  24. cast(sum(coalesce(ws.ws_net_paid, 0)) AS DECIMAL(15, 4))) AS currency_ratio
  25. FROM
  26. web_sales ws LEFT OUTER JOIN web_returns wr
  27. ON (ws.ws_order_number = wr.wr_order_number AND
  28. ws.ws_item_sk = wr.wr_item_sk)
  29. , date_dim
  30. WHERE
  31. wr.wr_return_amt > 10000
  32. AND ws.ws_net_profit > 1
  33. AND ws.ws_net_paid > 0
  34. AND ws.ws_quantity > 0
  35. AND ws_sold_date_sk = d_date_sk
  36. AND d_year = 2001
  37. AND d_moy = 12
  38. GROUP BY ws.ws_item_sk
  39. ) in_web
  40. ) web
  41. WHERE (web.return_rank <= 10 OR web.currency_rank <= 10)
  42. UNION
  43. SELECT
  44. 'catalog' AS channel,
  45. catalog.item,
  46. catalog.return_ratio,
  47. catalog.return_rank,
  48. catalog.currency_rank
  49. FROM (
  50. SELECT
  51. item,
  52. return_ratio,
  53. currency_ratio,
  54. rank()
  55. OVER (
  56. ORDER BY return_ratio) AS return_rank,
  57. rank()
  58. OVER (
  59. ORDER BY currency_ratio) AS currency_rank
  60. FROM
  61. (SELECT
  62. cs.cs_item_sk AS item,
  63. (cast(sum(coalesce(cr.cr_return_quantity, 0)) AS DECIMAL(15, 4)) /
  64. cast(sum(coalesce(cs.cs_quantity, 0)) AS DECIMAL(15, 4))) AS return_ratio,
  65. (cast(sum(coalesce(cr.cr_return_amount, 0)) AS DECIMAL(15, 4)) /
  66. cast(sum(coalesce(cs.cs_net_paid, 0)) AS DECIMAL(15, 4))) AS currency_ratio
  67. FROM
  68. catalog_sales cs LEFT OUTER JOIN catalog_returns cr
  69. ON (cs.cs_order_number = cr.cr_order_number AND
  70. cs.cs_item_sk = cr.cr_item_sk)
  71. , date_dim
  72. WHERE
  73. cr.cr_return_amount > 10000
  74. AND cs.cs_net_profit > 1
  75. AND cs.cs_net_paid > 0
  76. AND cs.cs_quantity > 0
  77. AND cs_sold_date_sk = d_date_sk
  78. AND d_year = 2001
  79. AND d_moy = 12
  80. GROUP BY cs.cs_item_sk
  81. ) in_cat
  82. ) catalog
  83. WHERE (catalog.return_rank <= 10 OR catalog.currency_rank <= 10)
  84. UNION
  85. SELECT
  86. 'store' AS channel,
  87. store.item,
  88. store.return_ratio,
  89. store.return_rank,
  90. store.currency_rank
  91. FROM (
  92. SELECT
  93. item,
  94. return_ratio,
  95. currency_ratio,
  96. rank()
  97. OVER (
  98. ORDER BY return_ratio) AS return_rank,
  99. rank()
  100. OVER (
  101. ORDER BY currency_ratio) AS currency_rank
  102. FROM
  103. (SELECT
  104. sts.ss_item_sk AS item,
  105. (cast(sum(coalesce(sr.sr_return_quantity, 0)) AS DECIMAL(15, 4)) /
  106. cast(sum(coalesce(sts.ss_quantity, 0)) AS DECIMAL(15, 4))) AS return_ratio,
  107. (cast(sum(coalesce(sr.sr_return_amt, 0)) AS DECIMAL(15, 4)) /
  108. cast(sum(coalesce(sts.ss_net_paid, 0)) AS DECIMAL(15, 4))) AS currency_ratio
  109. FROM
  110. store_sales sts LEFT OUTER JOIN store_returns sr
  111. ON (sts.ss_ticket_number = sr.sr_ticket_number AND sts.ss_item_sk = sr.sr_item_sk)
  112. , date_dim
  113. WHERE
  114. sr.sr_return_amt > 10000
  115. AND sts.ss_net_profit > 1
  116. AND sts.ss_net_paid > 0
  117. AND sts.ss_quantity > 0
  118. AND ss_sold_date_sk = d_date_sk
  119. AND d_year = 2001
  120. AND d_moy = 12
  121. GROUP BY sts.ss_item_sk
  122. ) in_store
  123. ) store
  124. WHERE (store.return_rank <= 10 OR store.currency_rank <= 10)
  125. ORDER BY 1, 4, 5
  126. LIMIT 100