Найти 100 лучших пользователей, которые прошли наибольшее расстояние и их имя - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть две таблицы с заданной схемой

1) USERS


Name   Type    Description
id    string   Assigned id
name  string   name of user
email string   email of user

2) RIDES

Name      Type     Description
id        string   Assigned id
user_id   string   id of user
distance  integer  distance traveled

Мне нужно написать запрос, чтобы найти ТОП-100 пользователей, которые прошли наибольшее расстояние, и их имена игнорируют связи в последней позиции.

Вот мой ответ, который, вероятно, не правильно. Может ли кто-нибудь помочь мне с этим.

SELECT TOP 100 USERS.name, RIDES.distance
FROM RIDES
ORDER BY RIDES.distance DESC
INNER JOIN RIDES ON USERS.id = RIDES.user_id

1 Ответ

1 голос
/ 29 сентября 2019

Вы почти у цели. 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) будет использоваться для выбора записей для отображения.

...