q57.sql 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. --!syntax_pg
  2. --TPC-DS Q57
  3. -- start query 1 in stream 0 using template ../query_templates/query57.tpl
  4. with v1 as(
  5. select i_category, i_brand,
  6. cc_name,
  7. d_year, d_moy,
  8. sum(cs_sales_price) sum_sales,
  9. avg(sum(cs_sales_price)) over
  10. (partition by i_category, i_brand,
  11. cc_name, d_year)
  12. avg_monthly_sales,
  13. rank() over
  14. (partition by i_category, i_brand,
  15. cc_name
  16. order by d_year, d_moy) rn
  17. from plato.item, plato.catalog_sales, plato.date_dim, plato.call_center
  18. where cs_item_sk = i_item_sk and
  19. cs_sold_date_sk = d_date_sk and
  20. cc_call_center_sk= cs_call_center_sk and
  21. (
  22. d_year = 2000 or
  23. ( d_year = 2000-1 and d_moy =12) or
  24. ( d_year = 2000+1 and d_moy =1)
  25. )
  26. group by i_category, i_brand,
  27. cc_name , d_year, d_moy),
  28. v2 as(
  29. select v1.cc_name
  30. ,v1.d_year, v1.d_moy
  31. ,v1.avg_monthly_sales
  32. ,v1.sum_sales, v1_lag.sum_sales psum, v1_lead.sum_sales nsum
  33. from v1, v1 v1_lag, v1 v1_lead
  34. where v1.i_category = v1_lag.i_category and
  35. v1.i_category = v1_lead.i_category and
  36. v1.i_brand = v1_lag.i_brand and
  37. v1.i_brand = v1_lead.i_brand and
  38. v1. cc_name = v1_lag. cc_name and
  39. v1. cc_name = v1_lead. cc_name and
  40. v1.rn = v1_lag.rn + 1 and
  41. v1.rn = v1_lead.rn - 1)
  42. select *
  43. from v2
  44. where d_year = 2000 and
  45. avg_monthly_sales > 0::numeric and
  46. case when avg_monthly_sales > 0::numeric then abs(sum_sales - avg_monthly_sales) / avg_monthly_sales else null::numeric end > 0.1::numeric
  47. order by sum_sales - avg_monthly_sales, nsum
  48. limit 100;
  49. -- end query 1 in stream 0 using template ../query_templates/query57.tpl