q23a.sql 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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, customer
  28. WHERE ss_customer_sk = c_customer_sk
  29. GROUP BY c_customer_sk
  30. HAVING sum(ss_quantity * ss_sales_price) > (50 / 100.0) *
  31. (SELECT *
  32. FROM max_store_sales))
  33. SELECT sum(sales)
  34. FROM ((SELECT cs_quantity * cs_list_price sales
  35. FROM catalog_sales, date_dim
  36. WHERE d_year = 2000
  37. AND d_moy = 2
  38. AND cs_sold_date_sk = d_date_sk
  39. AND cs_item_sk IN (SELECT item_sk
  40. FROM frequent_ss_items)
  41. AND cs_bill_customer_sk IN (SELECT c_customer_sk
  42. FROM best_ss_customer))
  43. UNION ALL
  44. (SELECT ws_quantity * ws_list_price sales
  45. FROM web_sales, date_dim
  46. WHERE d_year = 2000
  47. AND d_moy = 2
  48. AND ws_sold_date_sk = d_date_sk
  49. AND ws_item_sk IN (SELECT item_sk
  50. FROM frequent_ss_items)
  51. AND ws_bill_customer_sk IN (SELECT c_customer_sk
  52. FROM best_ss_customer))) y
  53. LIMIT 100