85 lines
2.4 KiB
SQL
85 lines
2.4 KiB
SQL
WITH frequent_ss_items AS
|
|
(SELECT itemdesc,
|
|
i_item_sk item_sk,
|
|
d_date solddate,
|
|
count(*) cnt
|
|
FROM store_sales,
|
|
date_dim,
|
|
(SELECT SUBSTRING(i_item_desc, 1, 30) itemdesc,
|
|
*
|
|
FROM item) sq1
|
|
WHERE ss_sold_date_sk = d_date_sk
|
|
AND ss_item_sk = i_item_sk
|
|
AND d_year IN (2000,
|
|
2000+1,
|
|
2000+2,
|
|
2000+3)
|
|
GROUP BY itemdesc,
|
|
i_item_sk,
|
|
d_date
|
|
HAVING count(*) >4),
|
|
max_store_sales AS
|
|
(SELECT max(csales) tpcds_cmax
|
|
FROM
|
|
(SELECT c_customer_sk,
|
|
sum(ss_quantity*ss_sales_price) csales
|
|
FROM store_sales,
|
|
customer,
|
|
date_dim
|
|
WHERE ss_customer_sk = c_customer_sk
|
|
AND ss_sold_date_sk = d_date_sk
|
|
AND d_year IN (2000,
|
|
2000+1,
|
|
2000+2,
|
|
2000+3)
|
|
GROUP BY c_customer_sk) sq2),
|
|
best_ss_customer AS
|
|
(SELECT c_customer_sk,
|
|
sum(ss_quantity*ss_sales_price) ssales
|
|
FROM store_sales,
|
|
customer,
|
|
max_store_sales
|
|
WHERE ss_customer_sk = c_customer_sk
|
|
GROUP BY c_customer_sk
|
|
HAVING sum(ss_quantity*ss_sales_price) > (50/100.0) * max(tpcds_cmax))
|
|
SELECT c_last_name,
|
|
c_first_name,
|
|
sales
|
|
FROM
|
|
(SELECT c_last_name,
|
|
c_first_name,
|
|
sum(cs_quantity*cs_list_price) sales
|
|
FROM catalog_sales,
|
|
customer,
|
|
date_dim,
|
|
frequent_ss_items,
|
|
best_ss_customer
|
|
WHERE d_year = 2000
|
|
AND d_moy = 2
|
|
AND cs_sold_date_sk = d_date_sk
|
|
AND cs_item_sk = item_sk
|
|
AND cs_bill_customer_sk = best_ss_customer.c_customer_sk
|
|
AND cs_bill_customer_sk = customer.c_customer_sk
|
|
GROUP BY c_last_name,
|
|
c_first_name
|
|
UNION ALL SELECT c_last_name,
|
|
c_first_name,
|
|
sum(ws_quantity*ws_list_price) sales
|
|
FROM web_sales,
|
|
customer,
|
|
date_dim,
|
|
frequent_ss_items,
|
|
best_ss_customer
|
|
WHERE d_year = 2000
|
|
AND d_moy = 2
|
|
AND ws_sold_date_sk = d_date_sk
|
|
AND ws_item_sk = item_sk
|
|
AND ws_bill_customer_sk = best_ss_customer.c_customer_sk
|
|
AND ws_bill_customer_sk = customer.c_customer_sk
|
|
GROUP BY c_last_name,
|
|
c_first_name) sq3
|
|
ORDER BY c_last_name NULLS FIRST,
|
|
c_first_name NULLS FIRST,
|
|
sales NULLS FIRST
|
|
LIMIT 100;
|