q23b.sql 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. WITH frequent_ss_items AS
  2. (SELECT
  3. substr(i_item_desc, 1, 30) itemdesc,
  4. i_item_sk item_sk,
  5. d_date solddate,
  6. count(*) cnt
  7. FROM store_sales, date_dim, item
  8. WHERE ss_sold_date_sk = d_date_sk
  9. AND ss_item_sk = i_item_sk
  10. AND d_year IN (2000, 2000 + 1, 2000 + 2, 2000 + 3)
  11. GROUP BY substr(i_item_desc, 1, 30), i_item_sk, d_date
  12. HAVING count(*) > 4),
  13. max_store_sales AS
  14. (SELECT max(csales) tpcds_cmax
  15. FROM (SELECT
  16. c_customer_sk,
  17. sum(ss_quantity * ss_sales_price) csales
  18. FROM store_sales, customer, date_dim
  19. WHERE ss_customer_sk = c_customer_sk
  20. AND ss_sold_date_sk = d_date_sk
  21. AND d_year IN (2000, 2000 + 1, 2000 + 2, 2000 + 3)
  22. GROUP BY c_customer_sk) x),
  23. best_ss_customer AS
  24. (SELECT
  25. c_customer_sk,
  26. sum(ss_quantity * ss_sales_price) ssales
  27. FROM store_sales
  28. , customer
  29. WHERE ss_customer_sk = c_customer_sk
  30. GROUP BY c_customer_sk
  31. HAVING sum(ss_quantity * ss_sales_price) > (50 / 100.0) *
  32. (SELECT *
  33. FROM max_store_sales))
  34. SELECT
  35. c_last_name,
  36. c_first_name,
  37. sales
  38. FROM ((SELECT
  39. c_last_name,
  40. c_first_name,
  41. sum(cs_quantity * cs_list_price) sales
  42. FROM catalog_sales, customer, date_dim
  43. WHERE d_year = 2000
  44. AND d_moy = 2
  45. AND cs_sold_date_sk = d_date_sk
  46. AND cs_item_sk IN (SELECT item_sk
  47. FROM frequent_ss_items)
  48. AND cs_bill_customer_sk IN (SELECT c_customer_sk
  49. FROM best_ss_customer)
  50. AND cs_bill_customer_sk = c_customer_sk
  51. GROUP BY c_last_name, c_first_name)
  52. UNION ALL
  53. (SELECT
  54. c_last_name,
  55. c_first_name,
  56. sum(ws_quantity * ws_list_price) sales
  57. FROM web_sales, customer, date_dim
  58. WHERE d_year = 2000
  59. AND d_moy = 2
  60. AND ws_sold_date_sk = d_date_sk
  61. AND ws_item_sk IN (SELECT item_sk
  62. FROM frequent_ss_items)
  63. AND ws_bill_customer_sk IN (SELECT c_customer_sk
  64. FROM best_ss_customer)
  65. AND ws_bill_customer_sk = c_customer_sk
  66. GROUP BY c_last_name, c_first_name)) y
  67. ORDER BY c_last_name, c_first_name, sales
  68. LIMIT 100