Player Season & Career Stats Finder - College Football
Current Search
For single seasons, in 2025, sorted by descending Passing TD.
THIS QUESTION WAS ANSWERED USING
POWERED BY
Your All Access Pass to the
College Football
Database
Go beyond the basics. Become a Stathead
Start Your FREE Trial
Display Query »
--------------------------------------
main
Page Setup Time: 0.00158 seconds
SELECT name_display, name_display_csk, sup_players.link as name_display_link, IFNULL(age, "") as age, GROUP_CONCAT(DISTINCT CONCAT("<a href=\"", "DOMAIN", REPLACE(ts.link,"cfb/",""), "\" target=\"_blank\">", ts.name_short, "</a>")) as teams_played_for, year_id as year_id_csk, year_id as year_id, is_complete_comp_season, pos, GROUP_CONCAT(DISTINCT sup_comp_seasons.name_abbr) as comp_name_abbr, person_id, comp_id, phase_id, CASE
WHEN class = "FR" THEN 1
WHEN class = "SO" THEN 2
WHEN class = "JR" THEN 3
WHEN class = "SR" THEN 4
ELSE 0
END as class_csk, IFNULL(class,"") as class, SUM(games) AS games, SUM(pass_cmp) AS pass_cmp, SUM(pass_att) AS pass_att, (SUM(pass_att)-SUM(pass_cmp)) AS pass_inc, IF(SUM(pass_att), SUM(pass_cmp)/SUM(pass_att), NULL) as pass_cmp_pct_csk, ROUND(100 * (IF(SUM(pass_att), SUM(pass_cmp)/SUM(pass_att), NULL)),1) AS pass_cmp_pct, SUM(pass_yds) AS pass_yds, SUM(pass_td) AS pass_td, SUM(pass_int) AS pass_int, IF(SUM(pass_att), SUM(pass_td)/SUM(pass_att), NULL) as pass_td_pct_csk, ROUND(100 * (IF(SUM(pass_att), SUM(pass_td)/SUM(pass_att), NULL)),1) AS pass_td_pct, IF(SUM(pass_att), SUM(pass_int)/SUM(pass_att), NULL) as pass_int_pct_csk, ROUND(100 * (IF(SUM(pass_att), SUM(pass_int)/SUM(pass_att), NULL)),1) AS pass_int_pct, IF(SUM(pass_att) > 0, (8.4 * SUM(pass_yds) + 330 * SUM(pass_td) - 200 * SUM(pass_int) + 100 * SUM(pass_cmp)) / SUM(pass_att), NULL) as pass_rating_csk, ROUND(IF(SUM(pass_att) > 0, (8.4 * SUM(pass_yds) + 330 * SUM(pass_td) - 200 * SUM(pass_int) + 100 * SUM(pass_cmp)) / SUM(pass_att), NULL),1) AS pass_rating, IF(SUM(pass_att), (SUM(pass_yds)/SUM(pass_att)), NULL) as pass_yds_per_att_csk, ROUND(IF(SUM(pass_att), (SUM(pass_yds)/SUM(pass_att)), NULL),1) AS pass_yds_per_att, IF(SUM(pass_att),(SUM(pass_yds) + 20.0 * SUM(pass_td) - 45.0 * SUM(pass_int))/SUM(pass_att),NULL) as pass_adj_yds_per_att_csk, ROUND(IF(SUM(pass_att),(SUM(pass_yds) + 20.0 * SUM(pass_td) - 45.0 * SUM(pass_int))/SUM(pass_att),NULL),2) AS pass_adj_yds_per_att, IF(SUM(pass_cmp), SUM(pass_yds)/SUM(pass_cmp), NULL) as pass_yds_per_cmp_csk, ROUND(IF(SUM(pass_cmp), SUM(pass_yds)/SUM(pass_cmp), NULL),1) AS pass_yds_per_cmp, IF(SUM(games), SUM(pass_yds)/SUM(games), NULL) as pass_yds_per_g_csk, ROUND(IF(SUM(games), SUM(pass_yds)/SUM(games), NULL),1) AS pass_yds_per_g
FROM sup_player_team_seasons as st
JOIN sup_people USING (person_id)
JOIN sup_players USING (person_id)
JOIN sup_phase_seasons USING (comp_id, phase_id, year_id)
JOIN sup_comp_seasons USING (comp_id, year_id)
JOIN (SELECT team_id, year_id, name_abbr, link, phase_id, comp_id, name_short, conf_id FROM sup_team_seasons) as ts USING (team_id, year_id, phase_id, comp_id)
LEFT JOIN (SELECT parent_conf_id, conf_id, conf_name, conf_abbr, link, comp_id, year_id FROM sup_conference_seasons) as team_conf USING (conf_id, comp_id, year_id)
WHERE year_id<=?
AND year_id>=?
AND phase_id = 'season-total'
GROUP BY person_id, year_id
ORDER BY pass_td DESC, person_id LIMIT 0, 20
SQL PARAMS -- $VAR1 = [
2025,
2025
];
Query Time: 0.52 seconds
Table Build Time: 0.04 seconds
--------------------------------------
SH->PARAM -- $VAR1 = {
'year_max' => 2025,
'year_min' => 2025,
'draft_pick_type' => 'overall',
'order_by' => 'pass_td',
'game_type' => 1,
'match' => 'player_season'
};
SH->PARAM_NO_DEFAULT -- $VAR1 = {
'game_type' => 1,
'year_max' => 2025,
'year_min' => 2025
};
--------------------------------------
main
Page Setup Time: 0.00158 seconds
SELECT name_display, name_display_csk, sup_players.link as name_display_link, IFNULL(age, "") as age, GROUP_CONCAT(DISTINCT CONCAT("<a href=\"", "DOMAIN", REPLACE(ts.link,"cfb/",""), "\" target=\"_blank\">", ts.name_short, "</a>")) as teams_played_for, year_id as year_id_csk, year_id as year_id, is_complete_comp_season, pos, GROUP_CONCAT(DISTINCT sup_comp_seasons.name_abbr) as comp_name_abbr, person_id, comp_id, phase_id, CASE
WHEN class = "FR" THEN 1
WHEN class = "SO" THEN 2
WHEN class = "JR" THEN 3
WHEN class = "SR" THEN 4
ELSE 0
END as class_csk, IFNULL(class,"") as class, SUM(games) AS games, SUM(pass_cmp) AS pass_cmp, SUM(pass_att) AS pass_att, (SUM(pass_att)-SUM(pass_cmp)) AS pass_inc, IF(SUM(pass_att), SUM(pass_cmp)/SUM(pass_att), NULL) as pass_cmp_pct_csk, ROUND(100 * (IF(SUM(pass_att), SUM(pass_cmp)/SUM(pass_att), NULL)),1) AS pass_cmp_pct, SUM(pass_yds) AS pass_yds, SUM(pass_td) AS pass_td, SUM(pass_int) AS pass_int, IF(SUM(pass_att), SUM(pass_td)/SUM(pass_att), NULL) as pass_td_pct_csk, ROUND(100 * (IF(SUM(pass_att), SUM(pass_td)/SUM(pass_att), NULL)),1) AS pass_td_pct, IF(SUM(pass_att), SUM(pass_int)/SUM(pass_att), NULL) as pass_int_pct_csk, ROUND(100 * (IF(SUM(pass_att), SUM(pass_int)/SUM(pass_att), NULL)),1) AS pass_int_pct, IF(SUM(pass_att) > 0, (8.4 * SUM(pass_yds) + 330 * SUM(pass_td) - 200 * SUM(pass_int) + 100 * SUM(pass_cmp)) / SUM(pass_att), NULL) as pass_rating_csk, ROUND(IF(SUM(pass_att) > 0, (8.4 * SUM(pass_yds) + 330 * SUM(pass_td) - 200 * SUM(pass_int) + 100 * SUM(pass_cmp)) / SUM(pass_att), NULL),1) AS pass_rating, IF(SUM(pass_att), (SUM(pass_yds)/SUM(pass_att)), NULL) as pass_yds_per_att_csk, ROUND(IF(SUM(pass_att), (SUM(pass_yds)/SUM(pass_att)), NULL),1) AS pass_yds_per_att, IF(SUM(pass_att),(SUM(pass_yds) + 20.0 * SUM(pass_td) - 45.0 * SUM(pass_int))/SUM(pass_att),NULL) as pass_adj_yds_per_att_csk, ROUND(IF(SUM(pass_att),(SUM(pass_yds) + 20.0 * SUM(pass_td) - 45.0 * SUM(pass_int))/SUM(pass_att),NULL),2) AS pass_adj_yds_per_att, IF(SUM(pass_cmp), SUM(pass_yds)/SUM(pass_cmp), NULL) as pass_yds_per_cmp_csk, ROUND(IF(SUM(pass_cmp), SUM(pass_yds)/SUM(pass_cmp), NULL),1) AS pass_yds_per_cmp, IF(SUM(games), SUM(pass_yds)/SUM(games), NULL) as pass_yds_per_g_csk, ROUND(IF(SUM(games), SUM(pass_yds)/SUM(games), NULL),1) AS pass_yds_per_g
FROM sup_player_team_seasons as st
JOIN sup_people USING (person_id)
JOIN sup_players USING (person_id)
JOIN sup_phase_seasons USING (comp_id, phase_id, year_id)
JOIN sup_comp_seasons USING (comp_id, year_id)
JOIN (SELECT team_id, year_id, name_abbr, link, phase_id, comp_id, name_short, conf_id FROM sup_team_seasons) as ts USING (team_id, year_id, phase_id, comp_id)
LEFT JOIN (SELECT parent_conf_id, conf_id, conf_name, conf_abbr, link, comp_id, year_id FROM sup_conference_seasons) as team_conf USING (conf_id, comp_id, year_id)
WHERE year_id<=?
AND year_id>=?
AND phase_id = 'season-total'
GROUP BY person_id, year_id
ORDER BY pass_td DESC, person_id LIMIT 0, 20
SQL PARAMS -- $VAR1 = [
2025,
2025
];
Query Time: 0.52 seconds
Table Build Time: 0.04 seconds
--------------------------------------
SH->PARAM -- $VAR1 = {
'year_max' => 2025,
'year_min' => 2025,
'draft_pick_type' => 'overall',
'order_by' => 'pass_td',
'game_type' => 1,
'match' => 'player_season'
};
SH->PARAM_NO_DEFAULT -- $VAR1 = {
'game_type' => 1,
'year_max' => 2025,
'year_min' => 2025
};
Data Coverage: Offensive statistics and game results are available back to 1956. Defensive statistics (tackles, fumble recoveries, sacks) are available back to 2005, except for interceptions, which are available back to 1976. Special teams statistics are also available back to 1976. Bowl game stats are included in totals since 2002. See Our Coverage Page for details.


We're Social...for Statheads
Site Last Updated:
Question, Comment, Feedback, or Correction?
Subscribe to our Free Email Newsletter
Do you have a sports website? Or write about sports? We have tools and resources that can help you use sports data. Find out more.