q23.sql 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. --!syntax_pg
  2. --TPC-DS Q23
  3. -- start query 1 in stream 0 using template ../query_templates/query23.tpl
  4. with frequent_ss_items as
  5. (select substr(i_item_desc,1,30) itemdesc,i_item_sk item_sk,d_date solddate,count(*) cnt
  6. from plato.store_sales
  7. ,plato.date_dim
  8. ,plato.item
  9. where ss_sold_date_sk = d_date_sk
  10. and ss_item_sk = i_item_sk
  11. and d_year in (1999,1999+1,1999+2,1999+3)
  12. group by substr(i_item_desc,1,30),i_item_sk,d_date
  13. having count(*) >4),
  14. max_store_sales as
  15. (select max(csales) tpcds_cmax
  16. from (select c_customer_sk,sum(ss_quantity::numeric*ss_sales_price) csales
  17. from plato.store_sales
  18. ,plato.customer
  19. ,plato.date_dim
  20. where ss_customer_sk = c_customer_sk
  21. and ss_sold_date_sk = d_date_sk
  22. and d_year in (1999,1999+1,1999+2,1999+3)
  23. group by c_customer_sk) a),
  24. best_ss_customer as
  25. (select c_customer_sk,sum(ss_quantity::numeric*ss_sales_price) ssales
  26. from plato.store_sales
  27. ,plato.customer
  28. where ss_customer_sk = c_customer_sk
  29. group by c_customer_sk
  30. having sum(ss_quantity::numeric*ss_sales_price) > (95.0/100.0)::numeric * (select
  31. *
  32. from
  33. max_store_sales)::numeric)
  34. select sum(sales)
  35. from (select cs_quantity::numeric*cs_list_price sales
  36. from plato.catalog_sales
  37. ,plato.date_dim
  38. where d_year = 1999
  39. and d_moy = 1
  40. and cs_sold_date_sk = d_date_sk
  41. and cs_item_sk in (select item_sk from frequent_ss_items)
  42. and cs_bill_customer_sk in (select c_customer_sk from best_ss_customer)
  43. union all
  44. select ws_quantity::numeric*ws_list_price sales
  45. from plato.web_sales
  46. ,plato.date_dim
  47. where d_year = 1999
  48. and d_moy = 1
  49. and ws_sold_date_sk = d_date_sk
  50. and ws_item_sk in (select item_sk from frequent_ss_items)
  51. and ws_bill_customer_sk in (select c_customer_sk from best_ss_customer)) a
  52. limit 100;
  53. with frequent_ss_items as
  54. (select substr(i_item_desc,1,30) itemdesc,i_item_sk item_sk,d_date solddate,count(*) cnt
  55. from plato.store_sales
  56. ,plato.date_dim
  57. ,plato.item
  58. where ss_sold_date_sk = d_date_sk
  59. and ss_item_sk = i_item_sk
  60. and d_year in (1999,1999 + 1,1999 + 2,1999 + 3)
  61. group by substr(i_item_desc,1,30),i_item_sk,d_date
  62. having count(*) >4),
  63. max_store_sales as
  64. (select max(csales) tpcds_cmax
  65. from (select c_customer_sk,sum(ss_quantity::numeric*ss_sales_price) csales
  66. from plato.store_sales
  67. ,plato.customer
  68. ,plato.date_dim
  69. where ss_customer_sk = c_customer_sk
  70. and ss_sold_date_sk = d_date_sk
  71. and d_year in (1999,1999+1,1999+2,1999+3)
  72. group by c_customer_sk) a),
  73. best_ss_customer as
  74. (select c_customer_sk,sum(ss_quantity::numeric*ss_sales_price) ssales
  75. from plato.store_sales
  76. ,plato.customer
  77. where ss_customer_sk = c_customer_sk
  78. group by c_customer_sk
  79. having sum(ss_quantity::numeric*ss_sales_price) > (95.0/100.0)::numeric * (select
  80. *
  81. from max_store_sales)::numeric)
  82. select c_last_name,c_first_name,sales
  83. from (select c_last_name,c_first_name,sum(cs_quantity::numeric*cs_list_price) sales
  84. from plato.catalog_sales
  85. ,plato.customer
  86. ,plato.date_dim
  87. where d_year = 1999
  88. and d_moy = 1
  89. and cs_sold_date_sk = d_date_sk
  90. and cs_item_sk in (select item_sk from frequent_ss_items)
  91. and cs_bill_customer_sk in (select c_customer_sk from best_ss_customer)
  92. and cs_bill_customer_sk = c_customer_sk
  93. group by c_last_name,c_first_name
  94. union all
  95. select c_last_name,c_first_name,sum(ws_quantity::numeric*ws_list_price) sales
  96. from plato.web_sales
  97. ,plato.customer
  98. ,plato.date_dim
  99. where d_year = 1999
  100. and d_moy = 1
  101. and ws_sold_date_sk = d_date_sk
  102. and ws_item_sk in (select item_sk from frequent_ss_items)
  103. and ws_bill_customer_sk in (select c_customer_sk from best_ss_customer)
  104. and ws_bill_customer_sk = c_customer_sk
  105. group by c_last_name,c_first_name) a
  106. order by c_last_name,c_first_name,sales
  107. limit 100;
  108. -- end query 1 in stream 0 using template ../query_templates/query23.tpl