query49.sql 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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() over (order by return_ratio) as return_rank
  13. ,rank() over (order by currency_ratio) as currency_rank
  14. from
  15. ( select ws.ws_item_sk as item
  16. ,(cast(sum(coalesce(wr.wr_return_quantity,0)) as decimal(15,4))/
  17. cast(sum(coalesce(ws.ws_quantity,0)) as decimal(15,4) )) as return_ratio
  18. ,(cast(sum(coalesce(wr.wr_return_amt,0)) as decimal(15,4))/
  19. cast(sum(coalesce(ws.ws_net_paid,0)) as decimal(15,4) )) as currency_ratio
  20. from
  21. web_sales ws left outer join web_returns wr
  22. on (ws.ws_order_number = wr.wr_order_number and
  23. ws.ws_item_sk = wr.wr_item_sk)
  24. ,date_dim
  25. where
  26. wr.wr_return_amt > 10000
  27. and ws.ws_net_profit > 1
  28. and ws.ws_net_paid > 0
  29. and ws.ws_quantity > 0
  30. and ws.ws_sold_date_sk = date_dim.d_date_sk
  31. and d_year = 2000
  32. and d_moy = 12
  33. and ws.ws_sold_date between '2000-12-01' and '2000-12-31'
  34. group by ws.ws_item_sk
  35. ) in_web
  36. ) web
  37. where
  38. (
  39. web.return_rank <= 10
  40. or
  41. web.currency_rank <= 10
  42. )
  43. union all
  44. select
  45. 'catalog' as channel
  46. ,catalog.item
  47. ,catalog.return_ratio
  48. ,catalog.return_rank
  49. ,catalog.currency_rank
  50. from (
  51. select
  52. item
  53. ,return_ratio
  54. ,currency_ratio
  55. ,rank() over (order by return_ratio) as return_rank
  56. ,rank() over (order by currency_ratio) as currency_rank
  57. from
  58. ( select
  59. cs.cs_item_sk as item
  60. ,(cast(sum(coalesce(cr.cr_return_quantity,0)) as decimal(15,4))/
  61. cast(sum(coalesce(cs.cs_quantity,0)) as decimal(15,4) )) as return_ratio
  62. ,(cast(sum(coalesce(cr.cr_return_amount,0)) as decimal(15,4))/
  63. cast(sum(coalesce(cs.cs_net_paid,0)) as decimal(15,4) )) as currency_ratio
  64. from
  65. catalog_sales cs left outer join catalog_returns cr
  66. on (cs.cs_order_number = cr.cr_order_number and
  67. cs.cs_item_sk = cr.cr_item_sk)
  68. ,date_dim
  69. where
  70. cr.cr_return_amount > 10000
  71. and cs.cs_net_profit > 1
  72. and cs.cs_net_paid > 0
  73. and cs.cs_quantity > 0
  74. and cs_sold_date_sk = d_date_sk
  75. and d_year = 2000
  76. and d_moy = 12
  77. and cs_sold_date between '2000-12-01' and '2000-12-31'
  78. group by cs.cs_item_sk
  79. ) in_cat
  80. ) catalog
  81. where
  82. (
  83. catalog.return_rank <= 10
  84. or
  85. catalog.currency_rank <=10
  86. )
  87. union all
  88. select
  89. 'store' as channel
  90. ,store.item
  91. ,store.return_ratio
  92. ,store.return_rank
  93. ,store.currency_rank
  94. from (
  95. select
  96. item
  97. ,return_ratio
  98. ,currency_ratio
  99. ,rank() over (order by return_ratio) as return_rank
  100. ,rank() over (order by currency_ratio) as currency_rank
  101. from
  102. ( select sts.ss_item_sk as item
  103. ,(cast(sum(coalesce(sr.sr_return_quantity,0)) as decimal(15,4))/cast(sum(coalesce(sts.ss_quantity,0)) as decimal(15,4) )) as return_ratio
  104. ,(cast(sum(coalesce(sr.sr_return_amt,0)) as decimal(15,4))/cast(sum(coalesce(sts.ss_net_paid,0)) as decimal(15,4) )) as currency_ratio
  105. from
  106. store_sales sts left outer join store_returns sr
  107. on (sts.ss_ticket_number = sr.sr_ticket_number and sts.ss_item_sk = sr.sr_item_sk)
  108. ,date_dim
  109. where
  110. sr.sr_return_amt > 10000
  111. and sts.ss_net_profit > 1
  112. and sts.ss_net_paid > 0
  113. and sts.ss_quantity > 0
  114. and ss_sold_date_sk = d_date_sk
  115. and d_year = 2000
  116. and d_moy = 12
  117. and ss_sold_date between '2000-12-01' and '2000-12-31'
  118. group by sts.ss_item_sk
  119. ) in_store
  120. ) store
  121. where (
  122. store.return_rank <= 10
  123. or
  124. store.currency_rank <= 10
  125. )
  126. order by 1,4,5
  127. limit 100;