It's the best time of the year for friends and family and the worst time of year for my gut. Between the office pot-lucks and ad-hoc bake offs there's bound to be a bad egg or two which results in the ever dreaded gargle gut. These holiday foods are particularly risky:

  • Salami
  • Deviled Eggs
  • Cheese sauce
  • Boiled Hot Dogs
  • Anything with the word "Salad" that's not actually a leaf salad

Let's say your office holds a New Years potluck party. You don't want to be rude so you show up and randomly select four items from the spread. What's the probability you picked one of the high risk items above?

We first need to identify all possible items to chose from. In addition to the items above we can also pick:

  • Mashed potatoes
  • Muffin
  • Pie
  • Corn Casserole
  • Broccoli Salad
  • Cheese Salad
  • Little Smokies
  • Corn Bread
  • Chocolate Chip Cookie
  • Fruit Salad
  • Beef Jerky
  • Ham Sandwich
  • Cake

This gives a total of 17 items served for a total of 57,120 possible combinations to pick from. We won't double up on any item so after each choice our available options shrinks by one (17 x 16 x 15 x 14 = 57,120).

The formula for a probability of an outcome is:

Probability = Risky Combinations / Total Possible Combinations

At this point we know the denominator is 57,120 so we modify the equation:

Probability = Risky Combinations / 57,120

We'll use a sql solution to find our numerator.

T-SQL Hammer Time

First thing is we need to convert our list into a set so we can apply multiplication and logic to our items. For starters we'll create a set using a temp table:


DECLARE @PotluckFood TABLE (Item VARCHAR(25))
INSERT INTO @PotluckFood( Item )

Select 'Mashed potatoes'                   as Item Union all 
Select 'Muffin'			           as Item Union all 
Select 'Pie'			           as Item Union all 
Select 'Corn Casserole'			   as Item Union all 
Select 'Broccoli Salad'			   as Item Union all 
Select 'Cheese Salad'			   as Item Union all 
Select 'little smokies'			   as Item Union all 
Select 'Corn Bread'		           as Item Union all 
Select 'Chocolate Chip COOKIE'	           as Item Union all 
Select 'Fruit Salad'			   as Item Union all 
Select 'Beef Jerky'		           as Item Union all 
Select 'Ham Sandwich'			   as Item Union all 
Select 'Cake'            		   as Item Union all 
Select 'Salami'				   as Item Union all 
Select 'Deviled Eggs'			   as Item Union all 
Select 'Cheese sauce'			   as Item Union all 
Select 'Boiled Hot Dogs'		   as Item



Aside - Notice the repetition in the code? Every line uses the words 'SELECT' and 'as Item Union all'. We can write this separately for each line or save keystrokes using the ALT-click trick. Just press and hold 'ALT' then click and drag down the editor. The keystrokes will be replicated across the lines. This trick works in NotePad ++ as well.

We can find the total possible combinations by performing a self 'CROSS JOIN' three times. The WHERE clause enforces the logic that we will not select the same item twice.

SELECT *
FROM @PotluckFood AS Item1
CROSS JOIN @PotluckFood AS Item2
CROSS JOIN @PotluckFood AS Item3
CROSS JOIN @PotluckFood AS Item4
WHERE (
Item1.Item <> Item2.Item AND 
Item1.ITem <> Item3.Item AND 
Item1.ITem <> Item4.Item AND 
Item2.ITem <> Item1.Item AND 
Item2.ITem <> Item3.Item AND 
Item2.ITem <> Item4.Item AND 
Item3.ITem <> Item1.Item AND 
Item3.ITem <> Item2.Item AND 
Item3.ITem <> Item4.Item AND 
Item4.ITem <> Item1.Item AND 
Item4.ITem <> Item2.Item AND 
Item4.ITem <> Item3.Item 
)

Now we can visually spot the check the list of possible combinations.

Holidays

We can find high risk combinations by appending this logic to our WHERE clause:

AND
(
Item1.Item IN ('Salami','Deviled Eggs','Cheese Sauce','Boiled Hot Dogs'	) or Item1.Item LIke '%Salad' OR
Item2.Item IN ('Salami','Deviled Eggs','Cheese Sauce','Boiled Hot Dogs'	) or Item2.Item LIke '%Salad' OR
Item3.Item IN ('Salami','Deviled Eggs','Cheese Sauce','Boiled Hot Dogs'	) or Item3.Item LIke '%Salad' OR
Item4.Item IN ('Salami','Deviled Eggs','Cheese Sauce','Boiled Hot Dogs'	) or Item4.Item LIke '%Salad'
)

We now have our numerator:

Holiday2

Our equation can be solved:

52,080 / 57,120 = .912

At a 91.2% percent chance of selecting one of the risky foods we'd be wise to invest in a few rolls of tums.