Moonboard Exploration
Hold Sets
When it comes to Moonboard training, climbers have several options to choose from. Moonboard hold sets can be purchased independently, allowing climbers to tailor their setups according to their needs and budget. However, to maximize training potential, the data clearly shows that some combinations of hold sets offer superior value, versatility, and challenge.
The pairing of Hold Set A and Hold Set B alone provides a strong foundation for a versatile climbing experience. With these two sets, climbers gain access to 30,161 routes, supported by 428 benchmarks across five versions of the Moonboard. At a total cost of £760, this combination offers a reasonable price of £0.03 per route, making it a popular choice among those looking to get the most out of their Moonboard without breaking the bank.
While the Hold Set A and Hold Set B combination is effective, adding the Original School Holds takes it to the next level. This trio unlocks an impressive 70,656 routes—more than double the number available with just Hold Set A and Hold Set B. The price per route drops significantly to £0.01, providing the best bang for the buck. With a total investment of £990 (for the holds), climbers benefit from the widest variety of routes, 805 benchmarks, and contributions from 384 benchmark setters, all across six different versions of the Moonboard. The sheer volume and diversity of climbing challenges make this combination unbeatable for those who want to push their limits.
Select Hold Sets
Breakdown
Breakdown by Version
Breakdown by Version & Grade
All hold sets
DuckDB Queries
SELECT
hold_sets,
list_transform(hold_sets, x ->
CASE
WHEN x = 'Original School Holds' THEN 230
WHEN x IN ('Hold Set A', 'Hold Set B') THEN 380
WHEN x = 'Hold Set C' THEN 430
WHEN x IN ('Wooden Holds', 'Wooden Holds B', 'Wooden Holds C') THEN 350
END
) AS hold_price, -- Price in £ as at 20240816
count(DISTINCT moonboard_version) AS versions,
count(problem_id) AS routes,
count(DISTINCT setter_id) AS setters,
count(DISTINCT grade) AS grades,
count(problem_id) FILTER (WHERE is_benchmark) AS benchmarks,
count(DISTINCT setter_id) FILTER (WHERE is_benchmark) AS benchmark_setters,
-- DuckDB friendly SQL, reusable column aliases
list_aggregate(hold_price, 'sum')::int AS hold_sets_price,
round(hold_sets_price / benchmarks, 2) AS benchmark_price,
round(hold_sets_price / routes, 2) AS route_price,
sum(repeats) AS total_climbs
FROM moonboard
GROUP BY 1,2
ORDER BY benchmarks DESC