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_salesFROM ( SELECT * FROM ss UNION ALL SELECT * FROM cs UNION ALL SELECT * FROM ws) AS tmp1GROUP BY i_item_idORDER BY total_sales, i_item_idLIMIT 100Representative 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 factorqueries = bench.get_queries(dialect="datafusion") # your platform's dialect; drop dialect= for native SQLprint(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