Вы почти у цели. TOP
не существует в MySQL (вместо этого вам нужно предложение LIMIT
). Кроме того, предложение ORDER BY
идет после JOIN
.
SELECT USERS.name, RIDES.distance
FROM USERS
INNER JOIN RIDES ON USERS.id = RIDES.user_id
ORDER BY RIDES.distance DESC, USERS.name, RIDES.id
LIMIT 100
. Это даст вам 100 самых длинных поездок и соответствующее имя пользователя.
Если вы хотите получить список пользователей, которые прошли наибольшее расстояние (все их поездки объединены), то вы можете включить агрегирование:
SELECT USERS.name, SUM(RIDES.distance) total_distance
FROM USERS
INNER JOIN RIDES ON USERS.id = RIDES.user_id
GROUP BY USERS.id, USERS.name
ORDER BY total_distance DESC, USERS.name
LIMIT 100
Каждый из приведенных выше запросов даст вам ровно 100 результатов при условиичто есть как минимум 100 аттракционов (или, соответственно, 100 пользователей). Если в последней позиции есть связи, дополнительная сортировка по USERS.name
и RIDES.id
(соответственно USERS.name
) будет использоваться для выбора записей для отображения.