Skip to content

TPC-DS Q68 — Store Sales Customer Household

TPC-DS benchmark · all TPC-DS queries

Reports customer household purchases by city

Representative SQL

Rendered for DataFusion with default parameters.

SELECT
c_last_name,
c_first_name,
ca_city,
bought_city,
ss_ticket_number,
extended_price,
extended_tax,
list_price
FROM (
SELECT
ss_ticket_number,
ss_customer_sk,
ca_city AS bought_city,
SUM(ss_ext_sales_price) AS extended_price,
SUM(ss_ext_list_price) AS list_price,
SUM(ss_ext_tax) AS extended_tax
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 date_dim.d_dom BETWEEN 1 AND 2
AND (
household_demographics.hd_dep_count = 5
OR household_demographics.hd_vehicle_count = 3
)
AND date_dim.d_year IN (1999, 1999 + 1, 1999 + 2)
AND store.s_city IN ('Midway', 'Fairview')
GROUP BY
ss_ticket_number,
ss_customer_sk,
ss_addr_sk,
ca_city
) AS dn, customer, customer_address AS 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,
ss_ticket_number
LIMIT 100

Representative DataFrame

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

def q68_expression_impl(ctx: DataFrameContext) -> Any:
inner = _ticket_household_inner_expression(
ctx,
68,
1999,
["Midway", "Fairview"],
5,
(
("extended_price", "ss_ext_sales_price"),
("list_price", "ss_ext_list_price"),
("extended_tax", "ss_ext_tax"),
),
dom_range=(1, 2),
)
return _ticket_household_outer_expression(
ctx,
inner,
[
"c_last_name",
"c_first_name",
"ca_city",
"bought_city",
"ss_ticket_number",
"extended_price",
"extended_tax",
"list_price",
],
["c_last_name", "ss_ticket_number"],
)

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

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

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

Source

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