q5.sql 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. WITH ssr AS
  2. ( SELECT
  3. s_store_id,
  4. sum(sales_price) AS sales,
  5. sum(profit) AS profit,
  6. sum(return_amt) AS RETURNS,
  7. sum(net_loss) AS profit_loss
  8. FROM
  9. (SELECT
  10. ss_store_sk AS store_sk,
  11. ss_sold_date_sk AS date_sk,
  12. ss_ext_sales_price AS sales_price,
  13. ss_net_profit AS profit,
  14. cast(0 AS DECIMAL(7, 2)) AS return_amt,
  15. cast(0 AS DECIMAL(7, 2)) AS net_loss
  16. FROM store_sales
  17. UNION ALL
  18. SELECT
  19. sr_store_sk AS store_sk,
  20. sr_returned_date_sk AS date_sk,
  21. cast(0 AS DECIMAL(7, 2)) AS sales_price,
  22. cast(0 AS DECIMAL(7, 2)) AS profit,
  23. sr_return_amt AS return_amt,
  24. sr_net_loss AS net_loss
  25. FROM store_returns)
  26. salesreturns, date_dim, store
  27. WHERE date_sk = d_date_sk
  28. AND d_date BETWEEN cast('2000-08-23' AS DATE)
  29. AND ((cast('2000-08-23' AS DATE) + INTERVAL 14 days))
  30. AND store_sk = s_store_sk
  31. GROUP BY s_store_id),
  32. csr AS
  33. ( SELECT
  34. cp_catalog_page_id,
  35. sum(sales_price) AS sales,
  36. sum(profit) AS profit,
  37. sum(return_amt) AS RETURNS,
  38. sum(net_loss) AS profit_loss
  39. FROM
  40. (SELECT
  41. cs_catalog_page_sk AS page_sk,
  42. cs_sold_date_sk AS date_sk,
  43. cs_ext_sales_price AS sales_price,
  44. cs_net_profit AS profit,
  45. cast(0 AS DECIMAL(7, 2)) AS return_amt,
  46. cast(0 AS DECIMAL(7, 2)) AS net_loss
  47. FROM catalog_sales
  48. UNION ALL
  49. SELECT
  50. cr_catalog_page_sk AS page_sk,
  51. cr_returned_date_sk AS date_sk,
  52. cast(0 AS DECIMAL(7, 2)) AS sales_price,
  53. cast(0 AS DECIMAL(7, 2)) AS profit,
  54. cr_return_amount AS return_amt,
  55. cr_net_loss AS net_loss
  56. FROM catalog_returns
  57. ) salesreturns, date_dim, catalog_page
  58. WHERE date_sk = d_date_sk
  59. AND d_date BETWEEN cast('2000-08-23' AS DATE)
  60. AND ((cast('2000-08-23' AS DATE) + INTERVAL 14 days))
  61. AND page_sk = cp_catalog_page_sk
  62. GROUP BY cp_catalog_page_id)
  63. ,
  64. wsr AS
  65. ( SELECT
  66. web_site_id,
  67. sum(sales_price) AS sales,
  68. sum(profit) AS profit,
  69. sum(return_amt) AS RETURNS,
  70. sum(net_loss) AS profit_loss
  71. FROM
  72. (SELECT
  73. ws_web_site_sk AS wsr_web_site_sk,
  74. ws_sold_date_sk AS date_sk,
  75. ws_ext_sales_price AS sales_price,
  76. ws_net_profit AS profit,
  77. cast(0 AS DECIMAL(7, 2)) AS return_amt,
  78. cast(0 AS DECIMAL(7, 2)) AS net_loss
  79. FROM web_sales
  80. UNION ALL
  81. SELECT
  82. ws_web_site_sk AS wsr_web_site_sk,
  83. wr_returned_date_sk AS date_sk,
  84. cast(0 AS DECIMAL(7, 2)) AS sales_price,
  85. cast(0 AS DECIMAL(7, 2)) AS profit,
  86. wr_return_amt AS return_amt,
  87. wr_net_loss AS net_loss
  88. FROM web_returns
  89. LEFT OUTER JOIN web_sales ON
  90. (wr_item_sk = ws_item_sk
  91. AND wr_order_number = ws_order_number)
  92. ) salesreturns, date_dim, web_site
  93. WHERE date_sk = d_date_sk
  94. AND d_date BETWEEN cast('2000-08-23' AS DATE)
  95. AND ((cast('2000-08-23' AS DATE) + INTERVAL 14 days))
  96. AND wsr_web_site_sk = web_site_sk
  97. GROUP BY web_site_id)
  98. SELECT
  99. channel,
  100. id,
  101. sum(sales) AS sales,
  102. sum(returns) AS returns,
  103. sum(profit) AS profit
  104. FROM
  105. (SELECT
  106. 'store channel' AS channel,
  107. concat('store', s_store_id) AS id,
  108. sales,
  109. returns,
  110. (profit - profit_loss) AS profit
  111. FROM ssr
  112. UNION ALL
  113. SELECT
  114. 'catalog channel' AS channel,
  115. concat('catalog_page', cp_catalog_page_id) AS id,
  116. sales,
  117. returns,
  118. (profit - profit_loss) AS profit
  119. FROM csr
  120. UNION ALL
  121. SELECT
  122. 'web channel' AS channel,
  123. concat('web_site', web_site_id) AS id,
  124. sales,
  125. returns,
  126. (profit - profit_loss) AS profit
  127. FROM wsr
  128. ) x
  129. GROUP BY ROLLUP (channel, id)
  130. ORDER BY channel, id
  131. LIMIT 100