TPC-DS Q66 — Web/Catalog Warehouse Monthly Sales
TPC-DS benchmark · all TPC-DS queries
Union of web and catalog sales aggregated by warehouse and month
Representative SQL
Rendered for DataFusion with default parameters.
SELECT w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country, ship_carriers, year, SUM(jan_sales) AS jan_sales, SUM(feb_sales) AS feb_sales, SUM(mar_sales) AS mar_sales, SUM(apr_sales) AS apr_sales, SUM(may_sales) AS may_sales, SUM(jun_sales) AS jun_sales, SUM(jul_sales) AS jul_sales, SUM(aug_sales) AS aug_sales, SUM(sep_sales) AS sep_sales, SUM(oct_sales) AS oct_sales, SUM(nov_sales) AS nov_sales, SUM(dec_sales) AS dec_sales, SUM(jan_sales / w_warehouse_sq_ft) AS jan_sales_per_sq_foot, SUM(feb_sales / w_warehouse_sq_ft) AS feb_sales_per_sq_foot, SUM(mar_sales / w_warehouse_sq_ft) AS mar_sales_per_sq_foot, SUM(apr_sales / w_warehouse_sq_ft) AS apr_sales_per_sq_foot, SUM(may_sales / w_warehouse_sq_ft) AS may_sales_per_sq_foot, SUM(jun_sales / w_warehouse_sq_ft) AS jun_sales_per_sq_foot, SUM(jul_sales / w_warehouse_sq_ft) AS jul_sales_per_sq_foot, SUM(aug_sales / w_warehouse_sq_ft) AS aug_sales_per_sq_foot, SUM(sep_sales / w_warehouse_sq_ft) AS sep_sales_per_sq_foot, SUM(oct_sales / w_warehouse_sq_ft) AS oct_sales_per_sq_foot, SUM(nov_sales / w_warehouse_sq_ft) AS nov_sales_per_sq_foot, SUM(dec_sales / w_warehouse_sq_ft) AS dec_sales_per_sq_foot, SUM(jan_net) AS jan_net, SUM(feb_net) AS feb_net, SUM(mar_net) AS mar_net, SUM(apr_net) AS apr_net, SUM(may_net) AS may_net, SUM(jun_net) AS jun_net, SUM(jul_net) AS jul_net, SUM(aug_net) AS aug_net, SUM(sep_net) AS sep_net, SUM(oct_net) AS oct_net, SUM(nov_net) AS nov_net, SUM(dec_net) AS dec_netFROM ( SELECT w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country, 'DIAMOND' || ',' || 'AIRBORNE' AS ship_carriers, d_year AS year, SUM(CASE WHEN d_moy = 1 THEN ws_sales_price * ws_quantity ELSE 0 END) AS jan_sales, SUM(CASE WHEN d_moy = 2 THEN ws_sales_price * ws_quantity ELSE 0 END) AS feb_sales, SUM(CASE WHEN d_moy = 3 THEN ws_sales_price * ws_quantity ELSE 0 END) AS mar_sales, SUM(CASE WHEN d_moy = 4 THEN ws_sales_price * ws_quantity ELSE 0 END) AS apr_sales, SUM(CASE WHEN d_moy = 5 THEN ws_sales_price * ws_quantity ELSE 0 END) AS may_sales, SUM(CASE WHEN d_moy = 6 THEN ws_sales_price * ws_quantity ELSE 0 END) AS jun_sales, SUM(CASE WHEN d_moy = 7 THEN ws_sales_price * ws_quantity ELSE 0 END) AS jul_sales, SUM(CASE WHEN d_moy = 8 THEN ws_sales_price * ws_quantity ELSE 0 END) AS aug_sales, SUM(CASE WHEN d_moy = 9 THEN ws_sales_price * ws_quantity ELSE 0 END) AS sep_sales, SUM(CASE WHEN d_moy = 10 THEN ws_sales_price * ws_quantity ELSE 0 END) AS oct_sales, SUM(CASE WHEN d_moy = 11 THEN ws_sales_price * ws_quantity ELSE 0 END) AS nov_sales, SUM(CASE WHEN d_moy = 12 THEN ws_sales_price * ws_quantity ELSE 0 END) AS dec_sales, SUM(CASE WHEN d_moy = 1 THEN ws_net_paid_inc_tax * ws_quantity ELSE 0 END) AS jan_net, SUM(CASE WHEN d_moy = 2 THEN ws_net_paid_inc_tax * ws_quantity ELSE 0 END) AS feb_net, SUM(CASE WHEN d_moy = 3 THEN ws_net_paid_inc_tax * ws_quantity ELSE 0 END) AS mar_net, SUM(CASE WHEN d_moy = 4 THEN ws_net_paid_inc_tax * ws_quantity ELSE 0 END) AS apr_net, SUM(CASE WHEN d_moy = 5 THEN ws_net_paid_inc_tax * ws_quantity ELSE 0 END) AS may_net, SUM(CASE WHEN d_moy = 6 THEN ws_net_paid_inc_tax * ws_quantity ELSE 0 END) AS jun_net, SUM(CASE WHEN d_moy = 7 THEN ws_net_paid_inc_tax * ws_quantity ELSE 0 END) AS jul_net, SUM(CASE WHEN d_moy = 8 THEN ws_net_paid_inc_tax * ws_quantity ELSE 0 END) AS aug_net, SUM(CASE WHEN d_moy = 9 THEN ws_net_paid_inc_tax * ws_quantity ELSE 0 END) AS sep_net, SUM(CASE WHEN d_moy = 10 THEN ws_net_paid_inc_tax * ws_quantity ELSE 0 END) AS oct_net, SUM(CASE WHEN d_moy = 11 THEN ws_net_paid_inc_tax * ws_quantity ELSE 0 END) AS nov_net, SUM(CASE WHEN d_moy = 12 THEN ws_net_paid_inc_tax * ws_quantity ELSE 0 END) AS dec_net FROM web_sales, warehouse, date_dim, time_dim, ship_mode WHERE ws_warehouse_sk = w_warehouse_sk AND ws_sold_date_sk = d_date_sk AND ws_sold_time_sk = t_time_sk AND ws_ship_mode_sk = sm_ship_mode_sk AND d_year = 2002 AND t_time BETWEEN 49530 AND 49530 + 28800 AND sm_carrier IN ('DIAMOND', 'AIRBORNE') GROUP BY w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country, d_year UNION ALL SELECT w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country, 'DIAMOND' || ',' || 'AIRBORNE' AS ship_carriers, d_year AS year, SUM(CASE WHEN d_moy = 1 THEN cs_ext_sales_price * cs_quantity ELSE 0 END) AS jan_sales, SUM(CASE WHEN d_moy = 2 THEN cs_ext_sales_price * cs_quantity ELSE 0 END) AS feb_sales, SUM(CASE WHEN d_moy = 3 THEN cs_ext_sales_price * cs_quantity ELSE 0 END) AS mar_sales, SUM(CASE WHEN d_moy = 4 THEN cs_ext_sales_price * cs_quantity ELSE 0 END) AS apr_sales, SUM(CASE WHEN d_moy = 5 THEN cs_ext_sales_price * cs_quantity ELSE 0 END) AS may_sales, SUM(CASE WHEN d_moy = 6 THEN cs_ext_sales_price * cs_quantity ELSE 0 END) AS jun_sales, SUM(CASE WHEN d_moy = 7 THEN cs_ext_sales_price * cs_quantity ELSE 0 END) AS jul_sales, SUM(CASE WHEN d_moy = 8 THEN cs_ext_sales_price * cs_quantity ELSE 0 END) AS aug_sales, SUM(CASE WHEN d_moy = 9 THEN cs_ext_sales_price * cs_quantity ELSE 0 END) AS sep_sales, SUM(CASE WHEN d_moy = 10 THEN cs_ext_sales_price * cs_quantity ELSE 0 END) AS oct_sales, SUM(CASE WHEN d_moy = 11 THEN cs_ext_sales_price * cs_quantity ELSE 0 END) AS nov_sales, SUM(CASE WHEN d_moy = 12 THEN cs_ext_sales_price * cs_quantity ELSE 0 END) AS dec_sales, SUM(CASE WHEN d_moy = 1 THEN cs_net_paid_inc_ship_tax * cs_quantity ELSE 0 END) AS jan_net, SUM(CASE WHEN d_moy = 2 THEN cs_net_paid_inc_ship_tax * cs_quantity ELSE 0 END) AS feb_net, SUM(CASE WHEN d_moy = 3 THEN cs_net_paid_inc_ship_tax * cs_quantity ELSE 0 END) AS mar_net, SUM(CASE WHEN d_moy = 4 THEN cs_net_paid_inc_ship_tax * cs_quantity ELSE 0 END) AS apr_net, SUM(CASE WHEN d_moy = 5 THEN cs_net_paid_inc_ship_tax * cs_quantity ELSE 0 END) AS may_net, SUM(CASE WHEN d_moy = 6 THEN cs_net_paid_inc_ship_tax * cs_quantity ELSE 0 END) AS jun_net, SUM(CASE WHEN d_moy = 7 THEN cs_net_paid_inc_ship_tax * cs_quantity ELSE 0 END) AS jul_net, SUM(CASE WHEN d_moy = 8 THEN cs_net_paid_inc_ship_tax * cs_quantity ELSE 0 END) AS aug_net, SUM(CASE WHEN d_moy = 9 THEN cs_net_paid_inc_ship_tax * cs_quantity ELSE 0 END) AS sep_net, SUM(CASE WHEN d_moy = 10 THEN cs_net_paid_inc_ship_tax * cs_quantity ELSE 0 END) AS oct_net, SUM(CASE WHEN d_moy = 11 THEN cs_net_paid_inc_ship_tax * cs_quantity ELSE 0 END) AS nov_net, SUM(CASE WHEN d_moy = 12 THEN cs_net_paid_inc_ship_tax * cs_quantity ELSE 0 END) AS dec_net FROM catalog_sales, warehouse, date_dim, time_dim, ship_mode WHERE cs_warehouse_sk = w_warehouse_sk AND cs_sold_date_sk = d_date_sk AND cs_sold_time_sk = t_time_sk AND cs_ship_mode_sk = sm_ship_mode_sk AND d_year = 2002 AND t_time BETWEEN 49530 AND 49530 + 28800 AND sm_carrier IN ('DIAMOND', 'AIRBORNE') GROUP BY w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country, d_year) AS xGROUP BY w_warehouse_name, w_warehouse_sq_ft, w_city, w_county, w_state, w_country, ship_carriers, yearORDER BY w_warehouse_nameLIMIT 100Representative DataFrame
Expression family (Polars, PySpark, DataFusion), default parameters.
def q66_expression_impl(ctx: DataFrameContext) -> Any: params = get_parameters(66) year = params.get("year", 2002) ship_carriers = params.get("ship_carriers", ["DIAMOND", "AIRBORNE"]) time_start = params.get("time_start", 49530) value_columns = _q66_value_columns(params)
col = ctx.col lit = ctx.lit
web_sales, catalog_sales, warehouse, date_dim, time_dim, ship_mode = _tables( ctx, "web_sales", "catalog_sales", "warehouse", "date_dim", "time_dim", "ship_mode" )
date_filtered = date_dim.filter(col("d_year") == lit(year)) time_filtered = time_dim.filter((col("t_time") >= lit(time_start)) & (col("t_time") <= lit(time_start + 28800))) sm_filtered = ship_mode.filter(col("sm_carrier").is_in(ship_carriers)) carriers_str = ",".join(ship_carriers)
def build_monthly_aggs(sales_col: str, net_col: str, qty_col: str): aggs = [] for month in range(1, 13): month_names = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"] mname = month_names[month - 1] aggs.append( ctx.when(col("d_moy") == lit(month)) .then(col(sales_col) * col(qty_col)) .otherwise(lit(0)) .sum() .alias(f"{mname}_sales") ) aggs.append( ctx.when(col("d_moy") == lit(month)) .then(col(net_col) * col(qty_col)) .otherwise(lit(0)) .sum() .alias(f"{mname}_net") ) return aggs
ws = ( web_sales.join(warehouse, left_on="ws_warehouse_sk", right_on="w_warehouse_sk") .join(date_filtered, left_on="ws_sold_date_sk", right_on="d_date_sk") .join(time_filtered, left_on="ws_sold_time_sk", right_on="t_time_sk") .join(sm_filtered, left_on="ws_ship_mode_sk", right_on="sm_ship_mode_sk") )
ws_agg = ( ws.group_by(["w_warehouse_name", "w_warehouse_sq_ft", "w_city", "w_county", "w_state", "w_country", "d_year"]) .agg(build_monthly_aggs(*value_columns["web"], "ws_quantity")) .with_columns( [ lit(carriers_str).alias("ship_carriers"), col("d_year").alias("year"), ] ) )
cs = ( catalog_sales.join(warehouse, left_on="cs_warehouse_sk", right_on="w_warehouse_sk") .join(date_filtered, left_on="cs_sold_date_sk", right_on="d_date_sk") .join(time_filtered, left_on="cs_sold_time_sk", right_on="t_time_sk") .join(sm_filtered, left_on="cs_ship_mode_sk", right_on="sm_ship_mode_sk") )
cs_agg = ( cs.group_by(["w_warehouse_name", "w_warehouse_sq_ft", "w_city", "w_county", "w_state", "w_country", "d_year"]) .agg(build_monthly_aggs(*value_columns["catalog"], "cs_quantity")) .with_columns( [ lit(carriers_str).alias("ship_carriers"), col("d_year").alias("year"), ] ) )
combined = ctx.concat([ws_agg, cs_agg])
group_cols = [ "w_warehouse_name", "w_warehouse_sq_ft", "w_city", "w_county", "w_state", "w_country", "ship_carriers", "year", ]
month_names = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"] agg_exprs = [] for mname in month_names: agg_exprs.append(ctx.sum(f"{mname}_sales").alias(f"{mname}_sales")) for mname in month_names: agg_exprs.append(ctx.sum(f"{mname}_net").alias(f"{mname}_net"))
grouped = combined.group_by(group_cols).agg(agg_exprs) per_foot = [ (col(f"{mname}_sales") / col("w_warehouse_sq_ft")).alias(f"{mname}_sales_per_sq_foot") for mname in month_names ] ordered = ( group_cols + [f"{m}_sales" for m in month_names] + [f"{m}_sales_per_sq_foot" for m in month_names] + [f"{m}_net" for m in month_names] ) return grouped.with_columns(per_foot).select(ordered).sort("w_warehouse_name", nulls_last=True).head(100)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['66'])Parameter substitution for this benchmark is seed-driven; pass a seed for a specific stream’s parameters:
print(bench.get_query(66, 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', '66', family="expression").source) # or family="pandas"Source
Query text: _sources/tpc-ds/query_templates/query66.tpl