q80.sql 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. WITH ssr AS
  2. (SELECT
  3. s_store_id AS store_id,
  4. sum(ss_ext_sales_price) AS sales,
  5. sum(coalesce(sr_return_amt, 0)) AS returns,
  6. sum(ss_net_profit - coalesce(sr_net_loss, 0)) AS profit
  7. FROM store_sales
  8. LEFT OUTER JOIN store_returns ON
  9. (ss_item_sk = sr_item_sk AND
  10. ss_ticket_number = sr_ticket_number)
  11. ,
  12. date_dim, store, item, promotion
  13. WHERE ss_sold_date_sk = d_date_sk
  14. AND d_date BETWEEN cast('2000-08-23' AS DATE)
  15. AND (cast('2000-08-23' AS DATE) + INTERVAL 30 days)
  16. AND ss_store_sk = s_store_sk
  17. AND ss_item_sk = i_item_sk
  18. AND i_current_price > 50
  19. AND ss_promo_sk = p_promo_sk
  20. AND p_channel_tv = 'N'
  21. GROUP BY s_store_id),
  22. csr AS
  23. (SELECT
  24. cp_catalog_page_id AS catalog_page_id,
  25. sum(cs_ext_sales_price) AS sales,
  26. sum(coalesce(cr_return_amount, 0)) AS returns,
  27. sum(cs_net_profit - coalesce(cr_net_loss, 0)) AS profit
  28. FROM catalog_sales
  29. LEFT OUTER JOIN catalog_returns ON
  30. (cs_item_sk = cr_item_sk AND
  31. cs_order_number = cr_order_number)
  32. ,
  33. date_dim, catalog_page, item, promotion
  34. WHERE cs_sold_date_sk = d_date_sk
  35. AND d_date BETWEEN cast('2000-08-23' AS DATE)
  36. AND (cast('2000-08-23' AS DATE) + INTERVAL 30 days)
  37. AND cs_catalog_page_sk = cp_catalog_page_sk
  38. AND cs_item_sk = i_item_sk
  39. AND i_current_price > 50
  40. AND cs_promo_sk = p_promo_sk
  41. AND p_channel_tv = 'N'
  42. GROUP BY cp_catalog_page_id),
  43. wsr AS
  44. (SELECT
  45. web_site_id,
  46. sum(ws_ext_sales_price) AS sales,
  47. sum(coalesce(wr_return_amt, 0)) AS returns,
  48. sum(ws_net_profit - coalesce(wr_net_loss, 0)) AS profit
  49. FROM web_sales
  50. LEFT OUTER JOIN web_returns ON
  51. (ws_item_sk = wr_item_sk AND ws_order_number = wr_order_number)
  52. ,
  53. date_dim, web_site, item, promotion
  54. WHERE ws_sold_date_sk = d_date_sk
  55. AND d_date BETWEEN cast('2000-08-23' AS DATE)
  56. AND (cast('2000-08-23' AS DATE) + INTERVAL 30 days)
  57. AND ws_web_site_sk = web_site_sk
  58. AND ws_item_sk = i_item_sk
  59. AND i_current_price > 50
  60. AND ws_promo_sk = p_promo_sk
  61. AND p_channel_tv = 'N'
  62. GROUP BY web_site_id)
  63. SELECT
  64. channel,
  65. id,
  66. sum(sales) AS sales,
  67. sum(returns) AS returns,
  68. sum(profit) AS profit
  69. FROM (SELECT
  70. 'store channel' AS channel,
  71. concat('store', store_id) AS id,
  72. sales,
  73. returns,
  74. profit
  75. FROM ssr
  76. UNION ALL
  77. SELECT
  78. 'catalog channel' AS channel,
  79. concat('catalog_page', catalog_page_id) AS id,
  80. sales,
  81. returns,
  82. profit
  83. FROM csr
  84. UNION ALL
  85. SELECT
  86. 'web channel' AS channel,
  87. concat('web_site', web_site_id) AS id,
  88. sales,
  89. returns,
  90. profit
  91. FROM wsr) x
  92. GROUP BY ROLLUP (channel, id)
  93. ORDER BY channel, id
  94. LIMIT 100