Обычно вам понадобится предложение GROUP BY. В MySQL правила, отличные от стандартного SQL, зависят от того, когда требуется GROUP BY. Поэтому это ближе к стандартному SQL:
SELECT tl.*,
(tl.topic_total_rating/tl.topic_rates) AS topic_rating,
COUNT(pl.post_id) - 1 AS reply_count,
MIN(pl.post_time) AS topic_time,
MAX(pl.post_time) AS topic_bump
FROM topic_list AS tl
JOIN post_list AS pl ON tl.topic_id = pl.post_parent
WHERE tl.topic_board_link = ? -- %i
AND tl.topic_hidden != 1
GROUP BY tl.col1, ..., topic_rating
ORDER BY ? -- %s
В стандартном SQL вам нужно будет перечислить каждый столбец в topic_list плюс неагрегированное значение topic_rating (и вам, возможно, придется перечислить выражение, а не отображаемую метку или псевдоним столбца в списке выбора).
У вас также есть условие ограничения для topic_board_link, которое может ограничивать ваш набор результатов одной группой. Обычно вы не можете использовать заполнитель в предложении ORDER BY.