Skip to content

TPC-DS Q56 — Three-Channel Sales by Item (Color)

TPC-DS benchmark · all TPC-DS queries

Union of store/catalog/web sales by item filtered by color

Representative SQL

Rendered for DataFusion with default parameters.

WITH ss AS (
SELECT
i_item_id,
SUM(ss_ext_sales_price) AS 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 ('orchid', 'chiffon', 'lace')
)
AND ss_item_sk = i_item_sk
AND ss_sold_date_sk = d_date_sk
AND d_year = 2000
AND d_moy = 1
AND ss_addr_sk = ca_address_sk
AND ca_gmt_offset = -8
GROUP BY
i_item_id
), cs AS (
SELECT
i_item_id,
SUM(cs_ext_sales_price) AS 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 ('orchid', 'chiffon', 'lace')
)
AND cs_item_sk = i_item_sk
AND cs_sold_date_sk = d_date_sk
AND d_year = 2000
AND d_moy = 1
AND cs_bill_addr_sk = ca_address_sk
AND ca_gmt_offset = -8
GROUP BY
i_item_id
), ws AS (
SELECT
i_item_id,
SUM(ws_ext_sales_price) AS 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 ('orchid', 'chiffon', 'lace')
)
AND ws_item_sk = i_item_sk
AND ws_sold_date_sk = d_date_sk
AND d_year = 2000
AND d_moy = 1
AND ws_bill_addr_sk = ca_address_sk
AND ca_gmt_offset = -8
GROUP BY
i_item_id
)
SELECT
i_item_id,
SUM(total_sales) AS total_sales
FROM (
SELECT
*
FROM ss
UNION ALL
SELECT
*
FROM cs
UNION ALL
SELECT
*
FROM ws
) AS tmp1
GROUP BY
i_item_id
ORDER BY
total_sales,
i_item_id
LIMIT 100

Representative DataFrame

Expression family (Polars, PySpark, DataFusion), default parameters.

def impl(ctx: DataFrameContext) -> Any:
return helper(ctx, query_id, *helper_args)

Get the exact query for your run

The blocks above are representative. To get the precise statement a specific platform runs at a specific scale, substitute your own values:

from benchbox import TPCDS
bench = TPCDS(scale_factor=1.0) # your scale factor
queries = bench.get_queries(dialect="datafusion") # your platform's dialect; drop dialect= for native SQL
print(queries['56'])

Parameter substitution for this benchmark is seed-driven; pass a seed for a specific stream’s parameters:

print(bench.get_query(56, scale_factor=1.0, seed=42, dialect="datafusion"))

For the DataFrame form:

from benchbox.core.query_catalog import get_dataframe_render
print(get_dataframe_render('tpcds', '56', family="expression").source) # or family="pandas"

Source

Query text: _sources/tpc-ds/query_templates/query56.tpl