1
0

q77.sql 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. WITH ss AS
  2. (SELECT
  3. s_store_sk,
  4. sum(ss_ext_sales_price) AS sales,
  5. sum(ss_net_profit) AS profit
  6. FROM store_sales, date_dim, store
  7. WHERE ss_sold_date_sk = d_date_sk
  8. AND d_date BETWEEN cast('2000-08-03' AS DATE) AND
  9. (cast('2000-08-03' AS DATE) + INTERVAL 30 days)
  10. AND ss_store_sk = s_store_sk
  11. GROUP BY s_store_sk),
  12. sr AS
  13. (SELECT
  14. s_store_sk,
  15. sum(sr_return_amt) AS returns,
  16. sum(sr_net_loss) AS profit_loss
  17. FROM store_returns, date_dim, store
  18. WHERE sr_returned_date_sk = d_date_sk
  19. AND d_date BETWEEN cast('2000-08-03' AS DATE) AND
  20. (cast('2000-08-03' AS DATE) + INTERVAL 30 days)
  21. AND sr_store_sk = s_store_sk
  22. GROUP BY s_store_sk),
  23. cs AS
  24. (SELECT
  25. cs_call_center_sk,
  26. sum(cs_ext_sales_price) AS sales,
  27. sum(cs_net_profit) AS profit
  28. FROM catalog_sales, date_dim
  29. WHERE cs_sold_date_sk = d_date_sk
  30. AND d_date BETWEEN cast('2000-08-03' AS DATE) AND
  31. (cast('2000-08-03' AS DATE) + INTERVAL 30 days)
  32. GROUP BY cs_call_center_sk),
  33. cr AS
  34. (SELECT
  35. sum(cr_return_amount) AS returns,
  36. sum(cr_net_loss) AS profit_loss
  37. FROM catalog_returns, date_dim
  38. WHERE cr_returned_date_sk = d_date_sk
  39. AND d_date BETWEEN cast('2000-08-03' AS DATE) AND
  40. (cast('2000-08-03' AS DATE) + INTERVAL 30 days)),
  41. ws AS
  42. (SELECT
  43. wp_web_page_sk,
  44. sum(ws_ext_sales_price) AS sales,
  45. sum(ws_net_profit) AS profit
  46. FROM web_sales, date_dim, web_page
  47. WHERE ws_sold_date_sk = d_date_sk
  48. AND d_date BETWEEN cast('2000-08-03' AS DATE) AND
  49. (cast('2000-08-03' AS DATE) + INTERVAL 30 days)
  50. AND ws_web_page_sk = wp_web_page_sk
  51. GROUP BY wp_web_page_sk),
  52. wr AS
  53. (SELECT
  54. wp_web_page_sk,
  55. sum(wr_return_amt) AS returns,
  56. sum(wr_net_loss) AS profit_loss
  57. FROM web_returns, date_dim, web_page
  58. WHERE wr_returned_date_sk = d_date_sk
  59. AND d_date BETWEEN cast('2000-08-03' AS DATE) AND
  60. (cast('2000-08-03' AS DATE) + INTERVAL 30 days)
  61. AND wr_web_page_sk = wp_web_page_sk
  62. GROUP BY wp_web_page_sk)
  63. SELECT
  64. channel,
  65. id,
  66. sum(sales) AS sales,
  67. sum(returns) AS returns,
  68. sum(profit) AS profit
  69. FROM
  70. (SELECT
  71. 'store channel' AS channel,
  72. ss.s_store_sk AS id,
  73. sales,
  74. coalesce(returns, 0) AS returns,
  75. (profit - coalesce(profit_loss, 0)) AS profit
  76. FROM ss
  77. LEFT JOIN sr
  78. ON ss.s_store_sk = sr.s_store_sk
  79. UNION ALL
  80. SELECT
  81. 'catalog channel' AS channel,
  82. cs_call_center_sk AS id,
  83. sales,
  84. returns,
  85. (profit - profit_loss) AS profit
  86. FROM cs, cr
  87. UNION ALL
  88. SELECT
  89. 'web channel' AS channel,
  90. ws.wp_web_page_sk AS id,
  91. sales,
  92. coalesce(returns, 0) returns,
  93. (profit - coalesce(profit_loss, 0)) AS profit
  94. FROM ws
  95. LEFT JOIN wr
  96. ON ws.wp_web_page_sk = wr.wp_web_page_sk
  97. ) x
  98. GROUP BY ROLLUP (channel, id)
  99. ORDER BY channel, id
  100. LIMIT 100