Skip to content

Find best two words #3

@visch

Description

@visch
WITH guesses AS (

SELECT
  word,
  SUBSTRING(word, 1, 1) letter_one,
  SUBSTRING(word, 2, 1) letter_two,
  SUBSTRING(word, 3, 1) letter_three,
  SUBSTRING(word, 4, 1) letter_four,
  SUBSTRING(word, 5, 1) letter_five
FROM public.wordle

), answers AS (

SELECT
  word,
  SUBSTRING(word, 1, 1) letter_one,
  SUBSTRING(word, 2, 1) letter_two,
  SUBSTRING(word, 3, 1) letter_three,
  SUBSTRING(word, 4, 1) letter_four,
  SUBSTRING(word, 5, 1) letter_five
FROM answer

), crossjoin AS (

SELECT
  g1.word AS g1,
  g2.word AS g2,
  answers.word AS answer,
  CASE
    WHEN answers.letter_one IN (g1.letter_one, g1.letter_two, g1.letter_three, g1.letter_four, g1.letter_five, g2.letter_one, g2.letter_two, g2.letter_three, g2.letter_four, g2.letter_five) THEN 1
    ELSE 0
  END AS a1_match,
  CASE
    WHEN answers.letter_two IN (g1.letter_one, g1.letter_two, g1.letter_three, g1.letter_four, g1.letter_five, g2.letter_one, g2.letter_two, g2.letter_three, g2.letter_four, g2.letter_five) THEN 1
    ELSE 0
  END AS a2_match,
  CASE
    WHEN answers.letter_three IN (g1.letter_one, g1.letter_two, g1.letter_three, g1.letter_four, g1.letter_five, g2.letter_one, g2.letter_two, g2.letter_three, g2.letter_four, g2.letter_five) THEN 1
    ELSE 0
  END AS a3_match,
  CASE
    WHEN answers.letter_four IN (g1.letter_one, g1.letter_two, g1.letter_three, g1.letter_four, g1.letter_five, g2.letter_one, g2.letter_two, g2.letter_three, g2.letter_four, g2.letter_five) THEN 1
    ELSE 0
  END AS a4_match,
  CASE
    WHEN answers.letter_five IN (g1.letter_one, g1.letter_two, g1.letter_three, g1.letter_four, g1.letter_five, g2.letter_one, g2.letter_two, g2.letter_three, g2.letter_four, g2.letter_five) THEN 1
    ELSE 0
  END AS a5_match
FROM guesses g1
CROSS JOIN guesses g2
CROSS JOIN answers

), count_answers AS (

SELECT
  g1,
  g2,
  answer,
  a1_match + a2_match + a3_match + a4_match + a5_match AS total
FROM crossjoin

), maths_agg AS (

SELECT
  g1,
  g2,
  SUM(total) sum,
  AVG(total) avg,
  stddev(total) stddev,
  MAX(total) max,
  MIN(total) min
FROM count_answers
GROUP BY g1, g2

), final AS (

SELECT
  *
FROM maths_agg

)
SELECT
  *
FROM final
order by avg desc
limit 200

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions