1
0

q54.sql 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. WITH my_customers AS (
  2. SELECT DISTINCT
  3. c_customer_sk,
  4. c_current_addr_sk
  5. FROM
  6. (SELECT
  7. cs_sold_date_sk sold_date_sk,
  8. cs_bill_customer_sk customer_sk,
  9. cs_item_sk item_sk
  10. FROM catalog_sales
  11. UNION ALL
  12. SELECT
  13. ws_sold_date_sk sold_date_sk,
  14. ws_bill_customer_sk customer_sk,
  15. ws_item_sk item_sk
  16. FROM web_sales
  17. ) cs_or_ws_sales,
  18. item,
  19. date_dim,
  20. customer
  21. WHERE sold_date_sk = d_date_sk
  22. AND item_sk = i_item_sk
  23. AND i_category = 'Women'
  24. AND i_class = 'maternity'
  25. AND c_customer_sk = cs_or_ws_sales.customer_sk
  26. AND d_moy = 12
  27. AND d_year = 1998
  28. )
  29. , my_revenue AS (
  30. SELECT
  31. c_customer_sk,
  32. sum(ss_ext_sales_price) AS revenue
  33. FROM my_customers,
  34. store_sales,
  35. customer_address,
  36. store,
  37. date_dim
  38. WHERE c_current_addr_sk = ca_address_sk
  39. AND ca_county = s_county
  40. AND ca_state = s_state
  41. AND ss_sold_date_sk = d_date_sk
  42. AND c_customer_sk = ss_customer_sk
  43. AND d_month_seq BETWEEN (SELECT DISTINCT d_month_seq + 1
  44. FROM date_dim
  45. WHERE d_year = 1998 AND d_moy = 12)
  46. AND (SELECT DISTINCT d_month_seq + 3
  47. FROM date_dim
  48. WHERE d_year = 1998 AND d_moy = 12)
  49. GROUP BY c_customer_sk
  50. )
  51. , segments AS
  52. (SELECT cast((revenue / 50) AS INT) AS segment
  53. FROM my_revenue)
  54. SELECT
  55. segment,
  56. count(*) AS num_customers,
  57. segment * 50 AS segment_base
  58. FROM segments
  59. GROUP BY segment
  60. ORDER BY segment, num_customers
  61. LIMIT 100