q47.sql 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. WITH v1 AS (
  2. SELECT
  3. i_category,
  4. i_brand,
  5. s_store_name,
  6. s_company_name,
  7. d_year,
  8. d_moy,
  9. sum(ss_sales_price) sum_sales,
  10. avg(sum(ss_sales_price))
  11. OVER
  12. (PARTITION BY i_category, i_brand,
  13. s_store_name, s_company_name, d_year)
  14. avg_monthly_sales,
  15. rank()
  16. OVER
  17. (PARTITION BY i_category, i_brand,
  18. s_store_name, s_company_name
  19. ORDER BY d_year, d_moy) rn
  20. FROM item, store_sales, date_dim, store
  21. WHERE ss_item_sk = i_item_sk AND
  22. ss_sold_date_sk = d_date_sk AND
  23. ss_store_sk = s_store_sk AND
  24. (
  25. d_year = 1999 OR
  26. (d_year = 1999 - 1 AND d_moy = 12) OR
  27. (d_year = 1999 + 1 AND d_moy = 1)
  28. )
  29. GROUP BY i_category, i_brand,
  30. s_store_name, s_company_name,
  31. d_year, d_moy),
  32. v2 AS (
  33. SELECT
  34. v1.i_category,
  35. v1.i_brand,
  36. v1.s_store_name,
  37. v1.s_company_name,
  38. v1.d_year,
  39. v1.d_moy,
  40. v1.avg_monthly_sales,
  41. v1.sum_sales,
  42. v1_lag.sum_sales psum,
  43. v1_lead.sum_sales nsum
  44. FROM v1, v1 v1_lag, v1 v1_lead
  45. WHERE v1.i_category = v1_lag.i_category AND
  46. v1.i_category = v1_lead.i_category AND
  47. v1.i_brand = v1_lag.i_brand AND
  48. v1.i_brand = v1_lead.i_brand AND
  49. v1.s_store_name = v1_lag.s_store_name AND
  50. v1.s_store_name = v1_lead.s_store_name AND
  51. v1.s_company_name = v1_lag.s_company_name AND
  52. v1.s_company_name = v1_lead.s_company_name AND
  53. v1.rn = v1_lag.rn + 1 AND
  54. v1.rn = v1_lead.rn - 1)
  55. SELECT *
  56. FROM v2
  57. WHERE d_year = 1999 AND
  58. avg_monthly_sales > 0 AND
  59. CASE WHEN avg_monthly_sales > 0
  60. THEN abs(sum_sales - avg_monthly_sales) / avg_monthly_sales
  61. ELSE NULL END > 0.1
  62. ORDER BY sum_sales - avg_monthly_sales, 3
  63. LIMIT 100