Jockey-Trainer Strike Rates at Happy Valley vs Sha Tin

· 4 min read

Hong Kong racing runs at two very different courses. Sha Tin is a wide, sweeping right-handed track with long straights. Happy Valley is a tight, turning left-hander where inside barriers and tactical speed matter more. Trainers know this. Jockeys know this. Punters should know it too.

The question is: which jockey-trainer partnerships actually perform better at each course? Not by reputation, but by measurable strike rates. Renavon's hkjc_race_results dataset has every race result since 1977, with jockey, trainer, venue, and finishing position data for every single runner. That's enough to answer this question definitively.

Finding the Best Combos by Venue

Start with the core query. This groups race entries by jockey, trainer, and venue, then calculates win rate and place rate for each combination.

SELECT
    jockey,
    trainer,
    venue,
    COUNT(*) AS rides,
    SUM(CASE WHEN is_winner THEN 1 ELSE 0 END) AS wins,
    ROUND(SUM(CASE WHEN is_winner THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) AS win_pct,
    ROUND(SUM(CASE WHEN is_top_three THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) AS place_pct
FROM renavon_hkjc_race_results.main.hkjc_race_results
WHERE race_date >= '2023-09-01'
  AND finishing_position > 0
GROUP BY jockey, trainer, venue
HAVING COUNT(*) >= 15
ORDER BY win_pct DESC
LIMIT 30;

A few notes on what's happening here:

  • finishing_position > 0 excludes scratched horses that never actually raced.
  • HAVING COUNT(*) >= 15 filters out partnerships with too few rides to be meaningful. Adjust this threshold depending on how far back you're looking.
  • The date filter covers the current and previous season. Extend or narrow it as needed.

Comparing the Same Partnership Across Venues

The next step is more interesting. For any given jockey-trainer combo, how do their numbers differ between Happy Valley and Sha Tin?

WITH combo_stats AS (
    SELECT
        jockey,
        trainer,
        venue,
        COUNT(*) AS rides,
        SUM(CASE WHEN is_winner THEN 1 ELSE 0 END) AS wins,
        ROUND(SUM(CASE WHEN is_winner THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) AS win_pct
    FROM renavon_hkjc_race_results.main.hkjc_race_results
    WHERE race_date >= '2022-09-01'
      AND finishing_position > 0
    GROUP BY jockey, trainer, venue
    HAVING COUNT(*) >= 10
)
SELECT
    st.jockey,
    st.trainer,
    st.wins AS st_wins,
    st.rides AS st_rides,
    st.win_pct AS sha_tin_pct,
    hv.wins AS hv_wins,
    hv.rides AS hv_rides,
    hv.win_pct AS happy_valley_pct,
    ROUND(hv.win_pct - st.win_pct, 1) AS hv_advantage
FROM combo_stats st
JOIN combo_stats hv
    ON st.jockey = hv.jockey
    AND st.trainer = hv.trainer
WHERE st.venue = 'Sha Tin'
  AND hv.venue = 'Happy Valley'
ORDER BY hv_advantage DESC;

This self-join lines up the same partnership's stats side by side. The hv_advantage column shows the difference in win percentage -- positive means they do better at Happy Valley, negative means they prefer Sha Tin. Partnerships with a large positive or negative swing are the ones worth paying attention to.

Factoring in Distance

Course-specific advantages often intersect with distance preferences. A jockey-trainer combo might excel at Happy Valley sprints specifically, because the tight track rewards a particular riding style at shorter distances.

SELECT
    jockey,
    trainer,
    venue,
    distance_category,
    COUNT(*) AS rides,
    SUM(CASE WHEN is_winner THEN 1 ELSE 0 END) AS wins,
    ROUND(SUM(CASE WHEN is_winner THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) AS win_pct,
    ROUND(AVG(win_odds_numeric), 1) AS avg_odds
FROM renavon_hkjc_race_results.main.hkjc_race_results
WHERE race_date >= '2023-09-01'
  AND finishing_position > 0
GROUP BY jockey, trainer, venue, distance_category
HAVING COUNT(*) >= 8
ORDER BY win_pct DESC
LIMIT 20;

Adding avg_odds is useful context. A partnership winning at 15% with average odds of $8 is far more profitable than one winning at 18% with average odds of $2.50.

How Punters Can Use This

These queries aren't theoretical exercises. Here's a practical workflow:

  1. Before each meeting, check which jockey-trainer combos have strong course-specific records. Happy Valley meetings in particular tend to reward specialists.
  2. Compare strike rates at the specific venue against the combo's overall record. A meaningful gap (5+ percentage points) is a signal worth acting on.
  3. Cross-reference with distance. If a partnership's edge only appears at sprint distances, don't back them in a 2000m race.
  4. Track over time. Run these queries at the start of each season and mid-season to see which partnerships are trending up or down.

The data is there. The edge comes from looking at it systematically rather than relying on gut feel.

Get Started

The hkjc_race_results dataset contains over 60 columns per race entry, going back nearly 50 years. Every query in this post runs directly against MotherDuck via your Renavon subscription -- connect with DuckDB, your favourite SQL client, or an AI agent via MCP. Browse the full dataset and column reference on the datasets page.

Get data insights in your inbox

New datasets, analysis, and Hong Kong market updates. No spam.

Explore HKJC racing data

Race results, entries, odds, jockey and trainer statistics — updated after every meeting.

View Racing Data
← Back to blog