q77.sql 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. --!syntax_pg
  2. --TPC-DS Q77
  3. -- start query 1 in stream 0 using template ../query_templates/query77.tpl
  4. with ss as
  5. (select s_store_sk,
  6. sum(ss_ext_sales_price) as sales,
  7. sum(ss_net_profit) as profit
  8. from plato.store_sales,
  9. plato.date_dim,
  10. plato.store
  11. where ss_sold_date_sk = d_date_sk
  12. and d_date between cast('1998-08-04' as date)
  13. and (cast('1998-08-04' as date) + interval '30' day)::date
  14. and ss_store_sk = s_store_sk
  15. group by s_store_sk)
  16. ,
  17. sr as
  18. (select s_store_sk,
  19. sum(sr_return_amt) as returns,
  20. sum(sr_net_loss) as profit_loss
  21. from plato.store_returns,
  22. plato.date_dim,
  23. plato.store
  24. where sr_returned_date_sk = d_date_sk
  25. and d_date between cast('1998-08-04' as date)
  26. and (cast('1998-08-04' as date) + interval '30' day)::date
  27. and sr_store_sk = s_store_sk
  28. group by s_store_sk),
  29. cs as
  30. (select cs_call_center_sk,
  31. sum(cs_ext_sales_price) as sales,
  32. sum(cs_net_profit) as profit
  33. from plato.catalog_sales,
  34. plato.date_dim
  35. where cs_sold_date_sk = d_date_sk
  36. and d_date between cast('1998-08-04' as date)
  37. and (cast('1998-08-04' as date) + interval '30' day)::date
  38. group by cs_call_center_sk
  39. ),
  40. cr as
  41. (select cr_call_center_sk,
  42. sum(cr_return_amount) as returns,
  43. sum(cr_net_loss) as profit_loss
  44. from plato.catalog_returns,
  45. plato.date_dim
  46. where cr_returned_date_sk = d_date_sk
  47. and d_date between cast('1998-08-04' as date)
  48. and (cast('1998-08-04' as date) + interval '30' day)::date
  49. group by cr_call_center_sk
  50. ),
  51. ws as
  52. ( select wp_web_page_sk,
  53. sum(ws_ext_sales_price) as sales,
  54. sum(ws_net_profit) as profit
  55. from plato.web_sales,
  56. plato.date_dim,
  57. plato.web_page
  58. where ws_sold_date_sk = d_date_sk
  59. and d_date between cast('1998-08-04' as date)
  60. and (cast('1998-08-04' as date) + interval '30' day)::date
  61. and ws_web_page_sk = wp_web_page_sk
  62. group by wp_web_page_sk),
  63. wr as
  64. (select wp_web_page_sk,
  65. sum(wr_return_amt) as returns,
  66. sum(wr_net_loss) as profit_loss
  67. from plato.web_returns,
  68. plato.date_dim,
  69. plato.web_page
  70. where wr_returned_date_sk = d_date_sk
  71. and d_date between cast('1998-08-04' as date)
  72. and (cast('1998-08-04' as date) + interval '30' day)::date
  73. and wr_web_page_sk = wp_web_page_sk
  74. group by wp_web_page_sk)
  75. select channel
  76. , id
  77. , sum(sales) as sales
  78. , sum(returns) as returns
  79. , sum(profit) as profit
  80. from
  81. (select 'store channel' as channel
  82. , ss.s_store_sk as id
  83. , sales
  84. , coalesce(returns, 0::numeric) as returns
  85. , (profit - coalesce(profit_loss,0::numeric)) as profit
  86. from ss left join sr
  87. on ss.s_store_sk = sr.s_store_sk
  88. union all
  89. select 'catalog channel' as channel
  90. , cs_call_center_sk as id
  91. , sales
  92. , returns
  93. , (profit - profit_loss) as profit
  94. from cs
  95. , cr
  96. union all
  97. select 'web channel' as channel
  98. , ws.wp_web_page_sk as id
  99. , sales
  100. , coalesce(returns, 0::numeric) returns
  101. , (profit - coalesce(profit_loss,0::numeric)) as profit
  102. from ws left join wr
  103. on ws.wp_web_page_sk = wr.wp_web_page_sk
  104. ) x
  105. group by rollup (channel, id)
  106. order by channel
  107. ,id
  108. limit 100;
  109. -- end query 1 in stream 0 using template ../query_templates/query77.tpl