runtime
63 / 88

task Join fan-out & cardinality · hard

Compare category audience overlap

For each alphabetically ordered pair of categories sharing at least one delivered-order shopper, return shared_buyers, union_buyers and jaccard = shared / union rounded to three decimals.

what to return

Columns
category_acategory_bshared_buyersunion_buyersjaccard in this order
Rows
6 rows · in the order asked
Watch for
A shopper belongs to a category once, regardless of repeat orders or quantities. Include only pairs with shared buyers.
Use category_a < category_b. Order by category_a,category_b.
Skill
Compute Jaccard overlap without inflating membership by line-item or repeat-order counts. Refresher: Multi-grain joins without fan-out →

expected result

Your query should return exactly these columns and values. Run it and compare.

expected result6 rows · in this order
category_acategory_bshared_buyersunion_buyersjaccard
GardenKitchen1100.1
GardenLighting1110.091
GardenOffice190.111

first 3 of 6 rows

data you can query

Sample rows from each table. Each column shows its type underneath; → marks a link to another table.

shoppers5 columns · 17 rows
idinteger · keynametextemailtextregiontextsignup_datetext
1Ana Ruizana@harbor.testWest2025-01-03
2Ben Okaforben@harbor.testEast2025-01-05
3Chloe Parkchloe@harbor.testWest2025-01-09
4Dmitri Volkovdmitri@harbor.testNorth2025-01-14
5Esi MensahNULLSouth2025-01-20

showing 5 of 17 rows

catalog_items4 columns · 13 rows
idinteger · keynametextcategorytextpricereal
1Desk LampLighting39
2Floor lampLighting89
3String LightsLighting19.5
4Chef KnifeKitchen59
5Cast Iron PanKitchen45

showing 5 of 13 rows

sales_orders5 columns · 33 rows
idinteger · keyshopper_idinteger → shoppersorder_datetextstatustextdelivered_datetext
10112025-01-04delivered2025-01-08
10222025-01-06delivered2025-01-07
10312025-01-15delivered2025-01-20
10432025-01-18cancelledNULL
10542025-01-22delivered2025-01-31

showing 5 of 33 rows

order_lines4 columns · 48 rows
order_idinteger → sales_ordersitem_idinteger → catalog_itemsquantityintegerunit_pricereal
1011139
1013219.5
1024159
1035145
10310312

showing 5 of 48 rows

solution.sql
 

Hints and the answer are always available. Using them counts the question as solved with help.