Skip to content
Snippets Groups Projects
Commit a78d6ce3 authored by Sameer Agarwal's avatar Sameer Agarwal Committed by Davies Liu
Browse files

[SPARK-15078] [SQL] Add all TPCDS 1.4 benchmark queries for SparkSQL

## What changes were proposed in this pull request?

Now that SparkSQL supports all TPC-DS queries, this patch adds all 99 benchmark queries inside SparkSQL.

## How was this patch tested?

Benchmark only

Author: Sameer Agarwal <sameer@databricks.com>

Closes #13188 from sameeragarwal/tpcds-all.
parent dcac8e6f
No related branches found
No related tags found
No related merge requests found
Showing
with 1057 additions and 0 deletions
SELECT DISTINCT (i_product_name)
FROM item i1
WHERE i_manufact_id BETWEEN 738 AND 738 + 40
AND (SELECT count(*) AS item_cnt
FROM item
WHERE (i_manufact = i1.i_manufact AND
((i_category = 'Women' AND
(i_color = 'powder' OR i_color = 'khaki') AND
(i_units = 'Ounce' OR i_units = 'Oz') AND
(i_size = 'medium' OR i_size = 'extra large')
) OR
(i_category = 'Women' AND
(i_color = 'brown' OR i_color = 'honeydew') AND
(i_units = 'Bunch' OR i_units = 'Ton') AND
(i_size = 'N/A' OR i_size = 'small')
) OR
(i_category = 'Men' AND
(i_color = 'floral' OR i_color = 'deep') AND
(i_units = 'N/A' OR i_units = 'Dozen') AND
(i_size = 'petite' OR i_size = 'large')
) OR
(i_category = 'Men' AND
(i_color = 'light' OR i_color = 'cornflower') AND
(i_units = 'Box' OR i_units = 'Pound') AND
(i_size = 'medium' OR i_size = 'extra large')
))) OR
(i_manufact = i1.i_manufact AND
((i_category = 'Women' AND
(i_color = 'midnight' OR i_color = 'snow') AND
(i_units = 'Pallet' OR i_units = 'Gross') AND
(i_size = 'medium' OR i_size = 'extra large')
) OR
(i_category = 'Women' AND
(i_color = 'cyan' OR i_color = 'papaya') AND
(i_units = 'Cup' OR i_units = 'Dram') AND
(i_size = 'N/A' OR i_size = 'small')
) OR
(i_category = 'Men' AND
(i_color = 'orange' OR i_color = 'frosted') AND
(i_units = 'Each' OR i_units = 'Tbl') AND
(i_size = 'petite' OR i_size = 'large')
) OR
(i_category = 'Men' AND
(i_color = 'forest' OR i_color = 'ghost') AND
(i_units = 'Lb' OR i_units = 'Bundle') AND
(i_size = 'medium' OR i_size = 'extra large')
)))) > 0
ORDER BY i_product_name
LIMIT 100
SELECT
dt.d_year,
item.i_category_id,
item.i_category,
sum(ss_ext_sales_price)
FROM date_dim dt, store_sales, item
WHERE dt.d_date_sk = store_sales.ss_sold_date_sk
AND store_sales.ss_item_sk = item.i_item_sk
AND item.i_manager_id = 1
AND dt.d_moy = 11
AND dt.d_year = 2000
GROUP BY dt.d_year
, item.i_category_id
, item.i_category
ORDER BY sum(ss_ext_sales_price) DESC, dt.d_year
, item.i_category_id
, item.i_category
LIMIT 100
SELECT
s_store_name,
s_store_id,
sum(CASE WHEN (d_day_name = 'Sunday')
THEN ss_sales_price
ELSE NULL END) sun_sales,
sum(CASE WHEN (d_day_name = 'Monday')
THEN ss_sales_price
ELSE NULL END) mon_sales,
sum(CASE WHEN (d_day_name = 'Tuesday')
THEN ss_sales_price
ELSE NULL END) tue_sales,
sum(CASE WHEN (d_day_name = 'Wednesday')
THEN ss_sales_price
ELSE NULL END) wed_sales,
sum(CASE WHEN (d_day_name = 'Thursday')
THEN ss_sales_price
ELSE NULL END) thu_sales,
sum(CASE WHEN (d_day_name = 'Friday')
THEN ss_sales_price
ELSE NULL END) fri_sales,
sum(CASE WHEN (d_day_name = 'Saturday')
THEN ss_sales_price
ELSE NULL END) sat_sales
FROM date_dim, store_sales, store
WHERE d_date_sk = ss_sold_date_sk AND
s_store_sk = ss_store_sk AND
s_gmt_offset = -5 AND
d_year = 2000
GROUP BY s_store_name, s_store_id
ORDER BY s_store_name, s_store_id, sun_sales, mon_sales, tue_sales, wed_sales,
thu_sales, fri_sales, sat_sales
LIMIT 100
SELECT
asceding.rnk,
i1.i_product_name best_performing,
i2.i_product_name worst_performing
FROM (SELECT *
FROM (SELECT
item_sk,
rank()
OVER (
ORDER BY rank_col ASC) rnk
FROM (SELECT
ss_item_sk item_sk,
avg(ss_net_profit) rank_col
FROM store_sales ss1
WHERE ss_store_sk = 4
GROUP BY ss_item_sk
HAVING avg(ss_net_profit) > 0.9 * (SELECT avg(ss_net_profit) rank_col
FROM store_sales
WHERE ss_store_sk = 4
AND ss_addr_sk IS NULL
GROUP BY ss_store_sk)) V1) V11
WHERE rnk < 11) asceding,
(SELECT *
FROM (SELECT
item_sk,
rank()
OVER (
ORDER BY rank_col DESC) rnk
FROM (SELECT
ss_item_sk item_sk,
avg(ss_net_profit) rank_col
FROM store_sales ss1
WHERE ss_store_sk = 4
GROUP BY ss_item_sk
HAVING avg(ss_net_profit) > 0.9 * (SELECT avg(ss_net_profit) rank_col
FROM store_sales
WHERE ss_store_sk = 4
AND ss_addr_sk IS NULL
GROUP BY ss_store_sk)) V2) V21
WHERE rnk < 11) descending,
item i1, item i2
WHERE asceding.rnk = descending.rnk
AND i1.i_item_sk = asceding.item_sk
AND i2.i_item_sk = descending.item_sk
ORDER BY asceding.rnk
LIMIT 100
SELECT
ca_zip,
ca_city,
sum(ws_sales_price)
FROM web_sales, customer, customer_address, date_dim, item
WHERE ws_bill_customer_sk = c_customer_sk
AND c_current_addr_sk = ca_address_sk
AND ws_item_sk = i_item_sk
AND (substr(ca_zip, 1, 5) IN
('85669', '86197', '88274', '83405', '86475', '85392', '85460', '80348', '81792')
OR
i_item_id IN (SELECT i_item_id
FROM item
WHERE i_item_sk IN (2, 3, 5, 7, 11, 13, 17, 19, 23, 29)
)
)
AND ws_sold_date_sk = d_date_sk
AND d_qoy = 2 AND d_year = 2001
GROUP BY ca_zip, ca_city
ORDER BY ca_zip, ca_city
LIMIT 100
SELECT
c_last_name,
c_first_name,
ca_city,
bought_city,
ss_ticket_number,
amt,
profit
FROM
(SELECT
ss_ticket_number,
ss_customer_sk,
ca_city bought_city,
sum(ss_coupon_amt) amt,
sum(ss_net_profit) profit
FROM store_sales, date_dim, store, household_demographics, customer_address
WHERE store_sales.ss_sold_date_sk = date_dim.d_date_sk
AND store_sales.ss_store_sk = store.s_store_sk
AND store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk
AND store_sales.ss_addr_sk = customer_address.ca_address_sk
AND (household_demographics.hd_dep_count = 4 OR
household_demographics.hd_vehicle_count = 3)
AND date_dim.d_dow IN (6, 0)
AND date_dim.d_year IN (1999, 1999 + 1, 1999 + 2)
AND store.s_city IN ('Fairview', 'Midway', 'Fairview', 'Fairview', 'Fairview')
GROUP BY ss_ticket_number, ss_customer_sk, ss_addr_sk, ca_city) dn, customer,
customer_address current_addr
WHERE ss_customer_sk = c_customer_sk
AND customer.c_current_addr_sk = current_addr.ca_address_sk
AND current_addr.ca_city <> bought_city
ORDER BY c_last_name, c_first_name, ca_city, bought_city, ss_ticket_number
LIMIT 100
WITH v1 AS (
SELECT
i_category,
i_brand,
s_store_name,
s_company_name,
d_year,
d_moy,
sum(ss_sales_price) sum_sales,
avg(sum(ss_sales_price))
OVER
(PARTITION BY i_category, i_brand,
s_store_name, s_company_name, d_year)
avg_monthly_sales,
rank()
OVER
(PARTITION BY i_category, i_brand,
s_store_name, s_company_name
ORDER BY d_year, d_moy) rn
FROM item, store_sales, date_dim, store
WHERE ss_item_sk = i_item_sk AND
ss_sold_date_sk = d_date_sk AND
ss_store_sk = s_store_sk AND
(
d_year = 1999 OR
(d_year = 1999 - 1 AND d_moy = 12) OR
(d_year = 1999 + 1 AND d_moy = 1)
)
GROUP BY i_category, i_brand,
s_store_name, s_company_name,
d_year, d_moy),
v2 AS (
SELECT
v1.i_category,
v1.i_brand,
v1.s_store_name,
v1.s_company_name,
v1.d_year,
v1.d_moy,
v1.avg_monthly_sales,
v1.sum_sales,
v1_lag.sum_sales psum,
v1_lead.sum_sales nsum
FROM v1, v1 v1_lag, v1 v1_lead
WHERE v1.i_category = v1_lag.i_category AND
v1.i_category = v1_lead.i_category AND
v1.i_brand = v1_lag.i_brand AND
v1.i_brand = v1_lead.i_brand AND
v1.s_store_name = v1_lag.s_store_name AND
v1.s_store_name = v1_lead.s_store_name AND
v1.s_company_name = v1_lag.s_company_name AND
v1.s_company_name = v1_lead.s_company_name AND
v1.rn = v1_lag.rn + 1 AND
v1.rn = v1_lead.rn - 1)
SELECT *
FROM v2
WHERE d_year = 1999 AND
avg_monthly_sales > 0 AND
CASE WHEN avg_monthly_sales > 0
THEN abs(sum_sales - avg_monthly_sales) / avg_monthly_sales
ELSE NULL END > 0.1
ORDER BY sum_sales - avg_monthly_sales, 3
LIMIT 100
SELECT sum(ss_quantity)
FROM store_sales, store, customer_demographics, customer_address, date_dim
WHERE s_store_sk = ss_store_sk
AND ss_sold_date_sk = d_date_sk AND d_year = 2001
AND
(
(
cd_demo_sk = ss_cdemo_sk
AND
cd_marital_status = 'M'
AND
cd_education_status = '4 yr Degree'
AND
ss_sales_price BETWEEN 100.00 AND 150.00
)
OR
(
cd_demo_sk = ss_cdemo_sk
AND
cd_marital_status = 'D'
AND
cd_education_status = '2 yr Degree'
AND
ss_sales_price BETWEEN 50.00 AND 100.00
)
OR
(
cd_demo_sk = ss_cdemo_sk
AND
cd_marital_status = 'S'
AND
cd_education_status = 'College'
AND
ss_sales_price BETWEEN 150.00 AND 200.00
)
)
AND
(
(
ss_addr_sk = ca_address_sk
AND
ca_country = 'United States'
AND
ca_state IN ('CO', 'OH', 'TX')
AND ss_net_profit BETWEEN 0 AND 2000
)
OR
(ss_addr_sk = ca_address_sk
AND
ca_country = 'United States'
AND
ca_state IN ('OR', 'MN', 'KY')
AND ss_net_profit BETWEEN 150 AND 3000
)
OR
(ss_addr_sk = ca_address_sk
AND
ca_country = 'United States'
AND
ca_state IN ('VA', 'CA', 'MS')
AND ss_net_profit BETWEEN 50 AND 25000
)
)
SELECT
'web' AS channel,
web.item,
web.return_ratio,
web.return_rank,
web.currency_rank
FROM (
SELECT
item,
return_ratio,
currency_ratio,
rank()
OVER (
ORDER BY return_ratio) AS return_rank,
rank()
OVER (
ORDER BY currency_ratio) AS currency_rank
FROM
(SELECT
ws.ws_item_sk AS item,
(cast(sum(coalesce(wr.wr_return_quantity, 0)) AS DECIMAL(15, 4)) /
cast(sum(coalesce(ws.ws_quantity, 0)) AS DECIMAL(15, 4))) AS return_ratio,
(cast(sum(coalesce(wr.wr_return_amt, 0)) AS DECIMAL(15, 4)) /
cast(sum(coalesce(ws.ws_net_paid, 0)) AS DECIMAL(15, 4))) AS currency_ratio
FROM
web_sales ws LEFT OUTER JOIN web_returns wr
ON (ws.ws_order_number = wr.wr_order_number AND
ws.ws_item_sk = wr.wr_item_sk)
, date_dim
WHERE
wr.wr_return_amt > 10000
AND ws.ws_net_profit > 1
AND ws.ws_net_paid > 0
AND ws.ws_quantity > 0
AND ws_sold_date_sk = d_date_sk
AND d_year = 2001
AND d_moy = 12
GROUP BY ws.ws_item_sk
) in_web
) web
WHERE (web.return_rank <= 10 OR web.currency_rank <= 10)
UNION
SELECT
'catalog' AS channel,
catalog.item,
catalog.return_ratio,
catalog.return_rank,
catalog.currency_rank
FROM (
SELECT
item,
return_ratio,
currency_ratio,
rank()
OVER (
ORDER BY return_ratio) AS return_rank,
rank()
OVER (
ORDER BY currency_ratio) AS currency_rank
FROM
(SELECT
cs.cs_item_sk AS item,
(cast(sum(coalesce(cr.cr_return_quantity, 0)) AS DECIMAL(15, 4)) /
cast(sum(coalesce(cs.cs_quantity, 0)) AS DECIMAL(15, 4))) AS return_ratio,
(cast(sum(coalesce(cr.cr_return_amount, 0)) AS DECIMAL(15, 4)) /
cast(sum(coalesce(cs.cs_net_paid, 0)) AS DECIMAL(15, 4))) AS currency_ratio
FROM
catalog_sales cs LEFT OUTER JOIN catalog_returns cr
ON (cs.cs_order_number = cr.cr_order_number AND
cs.cs_item_sk = cr.cr_item_sk)
, date_dim
WHERE
cr.cr_return_amount > 10000
AND cs.cs_net_profit > 1
AND cs.cs_net_paid > 0
AND cs.cs_quantity > 0
AND cs_sold_date_sk = d_date_sk
AND d_year = 2001
AND d_moy = 12
GROUP BY cs.cs_item_sk
) in_cat
) catalog
WHERE (catalog.return_rank <= 10 OR catalog.currency_rank <= 10)
UNION
SELECT
'store' AS channel,
store.item,
store.return_ratio,
store.return_rank,
store.currency_rank
FROM (
SELECT
item,
return_ratio,
currency_ratio,
rank()
OVER (
ORDER BY return_ratio) AS return_rank,
rank()
OVER (
ORDER BY currency_ratio) AS currency_rank
FROM
(SELECT
sts.ss_item_sk AS item,
(cast(sum(coalesce(sr.sr_return_quantity, 0)) AS DECIMAL(15, 4)) /
cast(sum(coalesce(sts.ss_quantity, 0)) AS DECIMAL(15, 4))) AS return_ratio,
(cast(sum(coalesce(sr.sr_return_amt, 0)) AS DECIMAL(15, 4)) /
cast(sum(coalesce(sts.ss_net_paid, 0)) AS DECIMAL(15, 4))) AS currency_ratio
FROM
store_sales sts LEFT OUTER JOIN store_returns sr
ON (sts.ss_ticket_number = sr.sr_ticket_number AND sts.ss_item_sk = sr.sr_item_sk)
, date_dim
WHERE
sr.sr_return_amt > 10000
AND sts.ss_net_profit > 1
AND sts.ss_net_paid > 0
AND sts.ss_quantity > 0
AND ss_sold_date_sk = d_date_sk
AND d_year = 2001
AND d_moy = 12
GROUP BY sts.ss_item_sk
) in_store
) store
WHERE (store.return_rank <= 10 OR store.currency_rank <= 10)
ORDER BY 1, 4, 5
LIMIT 100
WITH ssr AS
( SELECT
s_store_id,
sum(sales_price) AS sales,
sum(profit) AS profit,
sum(return_amt) AS RETURNS,
sum(net_loss) AS profit_loss
FROM
(SELECT
ss_store_sk AS store_sk,
ss_sold_date_sk AS date_sk,
ss_ext_sales_price AS sales_price,
ss_net_profit AS profit,
cast(0 AS DECIMAL(7, 2)) AS return_amt,
cast(0 AS DECIMAL(7, 2)) AS net_loss
FROM store_sales
UNION ALL
SELECT
sr_store_sk AS store_sk,
sr_returned_date_sk AS date_sk,
cast(0 AS DECIMAL(7, 2)) AS sales_price,
cast(0 AS DECIMAL(7, 2)) AS profit,
sr_return_amt AS return_amt,
sr_net_loss AS net_loss
FROM store_returns)
salesreturns, date_dim, store
WHERE date_sk = d_date_sk
AND d_date BETWEEN cast('2000-08-23' AS DATE)
AND ((cast('2000-08-23' AS DATE) + INTERVAL 14 days))
AND store_sk = s_store_sk
GROUP BY s_store_id),
csr AS
( SELECT
cp_catalog_page_id,
sum(sales_price) AS sales,
sum(profit) AS profit,
sum(return_amt) AS RETURNS,
sum(net_loss) AS profit_loss
FROM
(SELECT
cs_catalog_page_sk AS page_sk,
cs_sold_date_sk AS date_sk,
cs_ext_sales_price AS sales_price,
cs_net_profit AS profit,
cast(0 AS DECIMAL(7, 2)) AS return_amt,
cast(0 AS DECIMAL(7, 2)) AS net_loss
FROM catalog_sales
UNION ALL
SELECT
cr_catalog_page_sk AS page_sk,
cr_returned_date_sk AS date_sk,
cast(0 AS DECIMAL(7, 2)) AS sales_price,
cast(0 AS DECIMAL(7, 2)) AS profit,
cr_return_amount AS return_amt,
cr_net_loss AS net_loss
FROM catalog_returns
) salesreturns, date_dim, catalog_page
WHERE date_sk = d_date_sk
AND d_date BETWEEN cast('2000-08-23' AS DATE)
AND ((cast('2000-08-23' AS DATE) + INTERVAL 14 days))
AND page_sk = cp_catalog_page_sk
GROUP BY cp_catalog_page_id)
,
wsr AS
( SELECT
web_site_id,
sum(sales_price) AS sales,
sum(profit) AS profit,
sum(return_amt) AS RETURNS,
sum(net_loss) AS profit_loss
FROM
(SELECT
ws_web_site_sk AS wsr_web_site_sk,
ws_sold_date_sk AS date_sk,
ws_ext_sales_price AS sales_price,
ws_net_profit AS profit,
cast(0 AS DECIMAL(7, 2)) AS return_amt,
cast(0 AS DECIMAL(7, 2)) AS net_loss
FROM web_sales
UNION ALL
SELECT
ws_web_site_sk AS wsr_web_site_sk,
wr_returned_date_sk AS date_sk,
cast(0 AS DECIMAL(7, 2)) AS sales_price,
cast(0 AS DECIMAL(7, 2)) AS profit,
wr_return_amt AS return_amt,
wr_net_loss AS net_loss
FROM web_returns
LEFT OUTER JOIN web_sales ON
(wr_item_sk = ws_item_sk
AND wr_order_number = ws_order_number)
) salesreturns, date_dim, web_site
WHERE date_sk = d_date_sk
AND d_date BETWEEN cast('2000-08-23' AS DATE)
AND ((cast('2000-08-23' AS DATE) + INTERVAL 14 days))
AND wsr_web_site_sk = web_site_sk
GROUP BY web_site_id)
SELECT
channel,
id,
sum(sales) AS sales,
sum(returns) AS returns,
sum(profit) AS profit
FROM
(SELECT
'store channel' AS channel,
concat('store', s_store_id) AS id,
sales,
returns,
(profit - profit_loss) AS profit
FROM ssr
UNION ALL
SELECT
'catalog channel' AS channel,
concat('catalog_page', cp_catalog_page_id) AS id,
sales,
returns,
(profit - profit_loss) AS profit
FROM csr
UNION ALL
SELECT
'web channel' AS channel,
concat('web_site', web_site_id) AS id,
sales,
returns,
(profit - profit_loss) AS profit
FROM wsr
) x
GROUP BY ROLLUP (channel, id)
ORDER BY channel, id
LIMIT 100
SELECT
s_store_name,
s_company_id,
s_street_number,
s_street_name,
s_street_type,
s_suite_number,
s_city,
s_county,
s_state,
s_zip,
sum(CASE WHEN (sr_returned_date_sk - ss_sold_date_sk <= 30)
THEN 1
ELSE 0 END) AS `30 days `,
sum(CASE WHEN (sr_returned_date_sk - ss_sold_date_sk > 30) AND
(sr_returned_date_sk - ss_sold_date_sk <= 60)
THEN 1
ELSE 0 END) AS `31 - 60 days `,
sum(CASE WHEN (sr_returned_date_sk - ss_sold_date_sk > 60) AND
(sr_returned_date_sk - ss_sold_date_sk <= 90)
THEN 1
ELSE 0 END) AS `61 - 90 days `,
sum(CASE WHEN (sr_returned_date_sk - ss_sold_date_sk > 90) AND
(sr_returned_date_sk - ss_sold_date_sk <= 120)
THEN 1
ELSE 0 END) AS `91 - 120 days `,
sum(CASE WHEN (sr_returned_date_sk - ss_sold_date_sk > 120)
THEN 1
ELSE 0 END) AS `>120 days `
FROM
store_sales, store_returns, store, date_dim d1, date_dim d2
WHERE
d2.d_year = 2001
AND d2.d_moy = 8
AND ss_ticket_number = sr_ticket_number
AND ss_item_sk = sr_item_sk
AND ss_sold_date_sk = d1.d_date_sk
AND sr_returned_date_sk = d2.d_date_sk
AND ss_customer_sk = sr_customer_sk
AND ss_store_sk = s_store_sk
GROUP BY
s_store_name, s_company_id, s_street_number, s_street_name, s_street_type,
s_suite_number, s_city, s_county, s_state, s_zip
ORDER BY
s_store_name, s_company_id, s_street_number, s_street_name, s_street_type,
s_suite_number, s_city, s_county, s_state, s_zip
LIMIT 100
WITH web_v1 AS (
SELECT
ws_item_sk item_sk,
d_date,
sum(sum(ws_sales_price))
OVER (PARTITION BY ws_item_sk
ORDER BY d_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) cume_sales
FROM web_sales, date_dim
WHERE ws_sold_date_sk = d_date_sk
AND d_month_seq BETWEEN 1200 AND 1200 + 11
AND ws_item_sk IS NOT NULL
GROUP BY ws_item_sk, d_date),
store_v1 AS (
SELECT
ss_item_sk item_sk,
d_date,
sum(sum(ss_sales_price))
OVER (PARTITION BY ss_item_sk
ORDER BY d_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) cume_sales
FROM store_sales, date_dim
WHERE ss_sold_date_sk = d_date_sk
AND d_month_seq BETWEEN 1200 AND 1200 + 11
AND ss_item_sk IS NOT NULL
GROUP BY ss_item_sk, d_date)
SELECT *
FROM (SELECT
item_sk,
d_date,
web_sales,
store_sales,
max(web_sales)
OVER (PARTITION BY item_sk
ORDER BY d_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) web_cumulative,
max(store_sales)
OVER (PARTITION BY item_sk
ORDER BY d_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) store_cumulative
FROM (SELECT
CASE WHEN web.item_sk IS NOT NULL
THEN web.item_sk
ELSE store.item_sk END item_sk,
CASE WHEN web.d_date IS NOT NULL
THEN web.d_date
ELSE store.d_date END d_date,
web.cume_sales web_sales,
store.cume_sales store_sales
FROM web_v1 web FULL OUTER JOIN store_v1 store ON (web.item_sk = store.item_sk
AND web.d_date = store.d_date)
) x) y
WHERE web_cumulative > store_cumulative
ORDER BY item_sk, d_date
LIMIT 100
SELECT
dt.d_year,
item.i_brand_id brand_id,
item.i_brand brand,
sum(ss_ext_sales_price) ext_price
FROM date_dim dt, store_sales, item
WHERE dt.d_date_sk = store_sales.ss_sold_date_sk
AND store_sales.ss_item_sk = item.i_item_sk
AND item.i_manager_id = 1
AND dt.d_moy = 11
AND dt.d_year = 2000
GROUP BY dt.d_year, item.i_brand, item.i_brand_id
ORDER BY dt.d_year, ext_price DESC, brand_id
LIMIT 100
SELECT *
FROM
(SELECT
i_manufact_id,
sum(ss_sales_price) sum_sales,
avg(sum(ss_sales_price))
OVER (PARTITION BY i_manufact_id) avg_quarterly_sales
FROM item, store_sales, date_dim, store
WHERE ss_item_sk = i_item_sk AND
ss_sold_date_sk = d_date_sk AND
ss_store_sk = s_store_sk AND
d_month_seq IN (1200, 1200 + 1, 1200 + 2, 1200 + 3, 1200 + 4, 1200 + 5, 1200 + 6,
1200 + 7, 1200 + 8, 1200 + 9, 1200 + 10, 1200 + 11) AND
((i_category IN ('Books', 'Children', 'Electronics') AND
i_class IN ('personal', 'portable', 'reference', 'self-help') AND
i_brand IN ('scholaramalgamalg #14', 'scholaramalgamalg #7',
'exportiunivamalg #9', 'scholaramalgamalg #9'))
OR
(i_category IN ('Women', 'Music', 'Men') AND
i_class IN ('accessories', 'classical', 'fragrances', 'pants') AND
i_brand IN ('amalgimporto #1', 'edu packscholar #1', 'exportiimporto #1',
'importoamalg #1')))
GROUP BY i_manufact_id, d_qoy) tmp1
WHERE CASE WHEN avg_quarterly_sales > 0
THEN abs(sum_sales - avg_quarterly_sales) / avg_quarterly_sales
ELSE NULL END > 0.1
ORDER BY avg_quarterly_sales,
sum_sales,
i_manufact_id
LIMIT 100
WITH my_customers AS (
SELECT DISTINCT
c_customer_sk,
c_current_addr_sk
FROM
(SELECT
cs_sold_date_sk sold_date_sk,
cs_bill_customer_sk customer_sk,
cs_item_sk item_sk
FROM catalog_sales
UNION ALL
SELECT
ws_sold_date_sk sold_date_sk,
ws_bill_customer_sk customer_sk,
ws_item_sk item_sk
FROM web_sales
) cs_or_ws_sales,
item,
date_dim,
customer
WHERE sold_date_sk = d_date_sk
AND item_sk = i_item_sk
AND i_category = 'Women'
AND i_class = 'maternity'
AND c_customer_sk = cs_or_ws_sales.customer_sk
AND d_moy = 12
AND d_year = 1998
)
, my_revenue AS (
SELECT
c_customer_sk,
sum(ss_ext_sales_price) AS revenue
FROM my_customers,
store_sales,
customer_address,
store,
date_dim
WHERE c_current_addr_sk = ca_address_sk
AND ca_county = s_county
AND ca_state = s_state
AND ss_sold_date_sk = d_date_sk
AND c_customer_sk = ss_customer_sk
AND d_month_seq BETWEEN (SELECT DISTINCT d_month_seq + 1
FROM date_dim
WHERE d_year = 1998 AND d_moy = 12)
AND (SELECT DISTINCT d_month_seq + 3
FROM date_dim
WHERE d_year = 1998 AND d_moy = 12)
GROUP BY c_customer_sk
)
, segments AS
(SELECT cast((revenue / 50) AS INT) AS segment
FROM my_revenue)
SELECT
segment,
count(*) AS num_customers,
segment * 50 AS segment_base
FROM segments
GROUP BY segment
ORDER BY segment, num_customers
LIMIT 100
SELECT
i_brand_id brand_id,
i_brand brand,
sum(ss_ext_sales_price) ext_price
FROM date_dim, store_sales, item
WHERE d_date_sk = ss_sold_date_sk
AND ss_item_sk = i_item_sk
AND i_manager_id = 28
AND d_moy = 11
AND d_year = 1999
GROUP BY i_brand, i_brand_id
ORDER BY ext_price DESC, brand_id
LIMIT 100
WITH ss AS (
SELECT
i_item_id,
sum(ss_ext_sales_price) total_sales
FROM
store_sales, date_dim, customer_address, item
WHERE
i_item_id IN (SELECT i_item_id
FROM item
WHERE i_color IN ('slate', 'blanched', 'burnished'))
AND ss_item_sk = i_item_sk
AND ss_sold_date_sk = d_date_sk
AND d_year = 2001
AND d_moy = 2
AND ss_addr_sk = ca_address_sk
AND ca_gmt_offset = -5
GROUP BY i_item_id),
cs AS (
SELECT
i_item_id,
sum(cs_ext_sales_price) total_sales
FROM
catalog_sales, date_dim, customer_address, item
WHERE
i_item_id IN (SELECT i_item_id
FROM item
WHERE i_color IN ('slate', 'blanched', 'burnished'))
AND cs_item_sk = i_item_sk
AND cs_sold_date_sk = d_date_sk
AND d_year = 2001
AND d_moy = 2
AND cs_bill_addr_sk = ca_address_sk
AND ca_gmt_offset = -5
GROUP BY i_item_id),
ws AS (
SELECT
i_item_id,
sum(ws_ext_sales_price) total_sales
FROM
web_sales, date_dim, customer_address, item
WHERE
i_item_id IN (SELECT i_item_id
FROM item
WHERE i_color IN ('slate', 'blanched', 'burnished'))
AND ws_item_sk = i_item_sk
AND ws_sold_date_sk = d_date_sk
AND d_year = 2001
AND d_moy = 2
AND ws_bill_addr_sk = ca_address_sk
AND ca_gmt_offset = -5
GROUP BY i_item_id)
SELECT
i_item_id,
sum(total_sales) total_sales
FROM (SELECT *
FROM ss
UNION ALL
SELECT *
FROM cs
UNION ALL
SELECT *
FROM ws) tmp1
GROUP BY i_item_id
ORDER BY total_sales
LIMIT 100
WITH v1 AS (
SELECT
i_category,
i_brand,
cc_name,
d_year,
d_moy,
sum(cs_sales_price) sum_sales,
avg(sum(cs_sales_price))
OVER
(PARTITION BY i_category, i_brand, cc_name, d_year)
avg_monthly_sales,
rank()
OVER
(PARTITION BY i_category, i_brand, cc_name
ORDER BY d_year, d_moy) rn
FROM item, catalog_sales, date_dim, call_center
WHERE cs_item_sk = i_item_sk AND
cs_sold_date_sk = d_date_sk AND
cc_call_center_sk = cs_call_center_sk AND
(
d_year = 1999 OR
(d_year = 1999 - 1 AND d_moy = 12) OR
(d_year = 1999 + 1 AND d_moy = 1)
)
GROUP BY i_category, i_brand,
cc_name, d_year, d_moy),
v2 AS (
SELECT
v1.i_category,
v1.i_brand,
v1.cc_name,
v1.d_year,
v1.d_moy,
v1.avg_monthly_sales,
v1.sum_sales,
v1_lag.sum_sales psum,
v1_lead.sum_sales nsum
FROM v1, v1 v1_lag, v1 v1_lead
WHERE v1.i_category = v1_lag.i_category AND
v1.i_category = v1_lead.i_category AND
v1.i_brand = v1_lag.i_brand AND
v1.i_brand = v1_lead.i_brand AND
v1.cc_name = v1_lag.cc_name AND
v1.cc_name = v1_lead.cc_name AND
v1.rn = v1_lag.rn + 1 AND
v1.rn = v1_lead.rn - 1)
SELECT *
FROM v2
WHERE d_year = 1999 AND
avg_monthly_sales > 0 AND
CASE WHEN avg_monthly_sales > 0
THEN abs(sum_sales - avg_monthly_sales) / avg_monthly_sales
ELSE NULL END > 0.1
ORDER BY sum_sales - avg_monthly_sales, 3
LIMIT 100
WITH ss_items AS
(SELECT
i_item_id item_id,
sum(ss_ext_sales_price) ss_item_rev
FROM store_sales, item, date_dim
WHERE ss_item_sk = i_item_sk
AND d_date IN (SELECT d_date
FROM date_dim
WHERE d_week_seq = (SELECT d_week_seq
FROM date_dim
WHERE d_date = '2000-01-03'))
AND ss_sold_date_sk = d_date_sk
GROUP BY i_item_id),
cs_items AS
(SELECT
i_item_id item_id,
sum(cs_ext_sales_price) cs_item_rev
FROM catalog_sales, item, date_dim
WHERE cs_item_sk = i_item_sk
AND d_date IN (SELECT d_date
FROM date_dim
WHERE d_week_seq = (SELECT d_week_seq
FROM date_dim
WHERE d_date = '2000-01-03'))
AND cs_sold_date_sk = d_date_sk
GROUP BY i_item_id),
ws_items AS
(SELECT
i_item_id item_id,
sum(ws_ext_sales_price) ws_item_rev
FROM web_sales, item, date_dim
WHERE ws_item_sk = i_item_sk
AND d_date IN (SELECT d_date
FROM date_dim
WHERE d_week_seq = (SELECT d_week_seq
FROM date_dim
WHERE d_date = '2000-01-03'))
AND ws_sold_date_sk = d_date_sk
GROUP BY i_item_id)
SELECT
ss_items.item_id,
ss_item_rev,
ss_item_rev / (ss_item_rev + cs_item_rev + ws_item_rev) / 3 * 100 ss_dev,
cs_item_rev,
cs_item_rev / (ss_item_rev + cs_item_rev + ws_item_rev) / 3 * 100 cs_dev,
ws_item_rev,
ws_item_rev / (ss_item_rev + cs_item_rev + ws_item_rev) / 3 * 100 ws_dev,
(ss_item_rev + cs_item_rev + ws_item_rev) / 3 average
FROM ss_items, cs_items, ws_items
WHERE ss_items.item_id = cs_items.item_id
AND ss_items.item_id = ws_items.item_id
AND ss_item_rev BETWEEN 0.9 * cs_item_rev AND 1.1 * cs_item_rev
AND ss_item_rev BETWEEN 0.9 * ws_item_rev AND 1.1 * ws_item_rev
AND cs_item_rev BETWEEN 0.9 * ss_item_rev AND 1.1 * ss_item_rev
AND cs_item_rev BETWEEN 0.9 * ws_item_rev AND 1.1 * ws_item_rev
AND ws_item_rev BETWEEN 0.9 * ss_item_rev AND 1.1 * ss_item_rev
AND ws_item_rev BETWEEN 0.9 * cs_item_rev AND 1.1 * cs_item_rev
ORDER BY item_id, ss_item_rev
LIMIT 100
WITH wss AS
(SELECT
d_week_seq,
ss_store_sk,
sum(CASE WHEN (d_day_name = 'Sunday')
THEN ss_sales_price
ELSE NULL END) sun_sales,
sum(CASE WHEN (d_day_name = 'Monday')
THEN ss_sales_price
ELSE NULL END) mon_sales,
sum(CASE WHEN (d_day_name = 'Tuesday')
THEN ss_sales_price
ELSE NULL END) tue_sales,
sum(CASE WHEN (d_day_name = 'Wednesday')
THEN ss_sales_price
ELSE NULL END) wed_sales,
sum(CASE WHEN (d_day_name = 'Thursday')
THEN ss_sales_price
ELSE NULL END) thu_sales,
sum(CASE WHEN (d_day_name = 'Friday')
THEN ss_sales_price
ELSE NULL END) fri_sales,
sum(CASE WHEN (d_day_name = 'Saturday')
THEN ss_sales_price
ELSE NULL END) sat_sales
FROM store_sales, date_dim
WHERE d_date_sk = ss_sold_date_sk
GROUP BY d_week_seq, ss_store_sk
)
SELECT
s_store_name1,
s_store_id1,
d_week_seq1,
sun_sales1 / sun_sales2,
mon_sales1 / mon_sales2,
tue_sales1 / tue_sales2,
wed_sales1 / wed_sales2,
thu_sales1 / thu_sales2,
fri_sales1 / fri_sales2,
sat_sales1 / sat_sales2
FROM
(SELECT
s_store_name s_store_name1,
wss.d_week_seq d_week_seq1,
s_store_id s_store_id1,
sun_sales sun_sales1,
mon_sales mon_sales1,
tue_sales tue_sales1,
wed_sales wed_sales1,
thu_sales thu_sales1,
fri_sales fri_sales1,
sat_sales sat_sales1
FROM wss, store, date_dim d
WHERE d.d_week_seq = wss.d_week_seq AND
ss_store_sk = s_store_sk AND
d_month_seq BETWEEN 1212 AND 1212 + 11) y,
(SELECT
s_store_name s_store_name2,
wss.d_week_seq d_week_seq2,
s_store_id s_store_id2,
sun_sales sun_sales2,
mon_sales mon_sales2,
tue_sales tue_sales2,
wed_sales wed_sales2,
thu_sales thu_sales2,
fri_sales fri_sales2,
sat_sales sat_sales2
FROM wss, store, date_dim d
WHERE d.d_week_seq = wss.d_week_seq AND
ss_store_sk = s_store_sk AND
d_month_seq BETWEEN 1212 + 12 AND 1212 + 23) x
WHERE s_store_id1 = s_store_id2
AND d_week_seq1 = d_week_seq2 - 52
ORDER BY s_store_name1, s_store_id1, d_week_seq1
LIMIT 100
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment