Skip to content

TPC-DS Q87 — Three-Channel Customer EXCEPT

TPC-DS benchmark · all TPC-DS queries

Count customers who bought from store but NOT catalog/web

Representative SQL

Rendered for DataFusion with default parameters.

SELECT
COUNT(*)
FROM (
(
SELECT DISTINCT
c_last_name,
c_first_name,
d_date
FROM store_sales, date_dim, customer
WHERE
store_sales.ss_sold_date_sk = date_dim.d_date_sk
AND store_sales.ss_customer_sk = customer.c_customer_sk
AND d_month_seq BETWEEN 1212 AND 1212 + 11
)
EXCEPT
(
SELECT DISTINCT
c_last_name,
c_first_name,
d_date
FROM catalog_sales, date_dim, customer
WHERE
catalog_sales.cs_sold_date_sk = date_dim.d_date_sk
AND catalog_sales.cs_bill_customer_sk = customer.c_customer_sk
AND d_month_seq BETWEEN 1212 AND 1212 + 11
)
EXCEPT
(
SELECT DISTINCT
c_last_name,
c_first_name,
d_date
FROM web_sales, date_dim, customer
WHERE
web_sales.ws_sold_date_sk = date_dim.d_date_sk
AND web_sales.ws_bill_customer_sk = customer.c_customer_sk
AND d_month_seq BETWEEN 1212 AND 1212 + 11
)
) AS cool_cust

Representative DataFrame

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

def q87_expression_impl(ctx: DataFrameContext) -> Any:
return _three_channel_customer_count_expression(ctx, 87, "except")

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['87'])

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

print(bench.get_query(87, 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', '87', family="expression").source) # or family="pandas"

Source

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