q05.sql 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. --!syntax_pg
  2. --TPC-DS Q5
  3. -- start query 1 in stream 0 using template ../query_templates/query5.tpl
  4. with ssr as
  5. (select s_store_id,
  6. sum(sales_price) as sales,
  7. sum(profit) as profit,
  8. sum(return_amt) as returns,
  9. sum(net_loss) as profit_loss
  10. from
  11. ( select ss_store_sk as store_sk,
  12. ss_sold_date_sk as date_sk,
  13. ss_ext_sales_price as sales_price,
  14. ss_net_profit as profit,
  15. cast(0 as decimal(7,2)) as return_amt,
  16. cast(0 as decimal(7,2)) as net_loss
  17. from plato.store_sales
  18. union all
  19. select 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 plato.store_returns
  26. ) salesreturns,
  27. plato.date_dim,
  28. plato.store
  29. where date_sk = d_date_sk
  30. and d_date between cast('1998-08-04' as date)
  31. and (cast('1998-08-04' as date) + interval '14' day)::date
  32. and store_sk = s_store_sk
  33. group by s_store_id)
  34. ,
  35. csr as
  36. (select cp_catalog_page_id,
  37. sum(sales_price) as sales,
  38. sum(profit) as profit,
  39. sum(return_amt) as returns,
  40. sum(net_loss) as profit_loss
  41. from
  42. ( select cs_catalog_page_sk as page_sk,
  43. cs_sold_date_sk as date_sk,
  44. cs_ext_sales_price as sales_price,
  45. cs_net_profit as profit,
  46. cast(0 as decimal(7,2)) as return_amt,
  47. cast(0 as decimal(7,2)) as net_loss
  48. from plato.catalog_sales
  49. union all
  50. select 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 plato.catalog_returns
  57. ) salesreturns,
  58. plato.date_dim,
  59. plato.catalog_page
  60. where date_sk = d_date_sk
  61. and d_date between cast('1998-08-04' as date)
  62. and (cast('1998-08-04' as date) + interval '14' day)::date
  63. and page_sk = cp_catalog_page_sk
  64. group by cp_catalog_page_id)
  65. ,
  66. wsr as
  67. (select web_site_id,
  68. sum(sales_price) as sales,
  69. sum(profit) as profit,
  70. sum(return_amt) as returns,
  71. sum(net_loss) as profit_loss
  72. from
  73. ( select 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 plato.web_sales
  80. union all
  81. select ws_web_site_sk as wsr_web_site_sk,
  82. wr_returned_date_sk as date_sk,
  83. cast(0 as decimal(7,2)) as sales_price,
  84. cast(0 as decimal(7,2)) as profit,
  85. wr_return_amt as return_amt,
  86. wr_net_loss as net_loss
  87. from plato.web_returns left outer join plato.web_sales on
  88. ( wr_item_sk = ws_item_sk
  89. and wr_order_number = ws_order_number)
  90. ) salesreturns,
  91. plato.date_dim,
  92. plato.web_site
  93. where date_sk = d_date_sk
  94. and d_date between cast('1998-08-04' as date)
  95. and (cast('1998-08-04' as date) + interval '14' day)::date
  96. and wsr_web_site_sk = web_site_sk
  97. group by web_site_id)
  98. select channel
  99. , id
  100. , sum(sales) as sales
  101. , sum(returns) as returns
  102. , sum(profit) as profit
  103. from
  104. (select 'store channel' as channel
  105. , 'store' || s_store_id as id
  106. , sales
  107. , returns
  108. , (profit - profit_loss) as profit
  109. from ssr
  110. union all
  111. select 'catalog channel' as channel
  112. , 'catalog_page' || cp_catalog_page_id as id
  113. , sales
  114. , returns
  115. , (profit - profit_loss) as profit
  116. from csr
  117. union all
  118. select 'web channel' as channel
  119. , 'web_site' || web_site_id as id
  120. , sales
  121. , returns
  122. , (profit - profit_loss) as profit
  123. from wsr
  124. ) x
  125. group by rollup (channel, id)
  126. order by channel
  127. ,id
  128. limit 100;
  129. -- end query 1 in stream 0 using template ../query_templates/query5.tpl