Mysql 查找旅行距离最远的前100名用户及其姓名

Mysql 查找旅行距离最远的前100名用户及其姓名,mysql,sql,sql-order-by,inner-join,greatest-n-per-group,Mysql,Sql,Sql Order By,Inner Join,Greatest N Per Group,我有两个具有给定模式的表 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 in

我有两个具有给定模式的表

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

你就快到了。MySQL中不存在TOP,您需要一个LIMIT子句。此外,ORDERBY子句位于JOIN之后

这将为您提供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 resp上的额外排序将被取消。USERS.name将用于选择应显示哪些记录。

更新:我已附上一些数字以了解更多信息。 我在一次采访中得到了这个问题,这个问题应该理解为: 前100名用户总共出行最多,因此@GMB的答案应该使用一些聚合功能进行更新,如

select distinct *, sum(distance) over(partition by user_id) from ...

我记不起表格、方案的所有详细信息问题描述中也缺少另一个名为CITIES I guess?等的方案,但您应该能够根据此提示轻松解决问题。

选择。。。从…起[加入]。。。[WHERE][GROUP BY][have][ORDER BY][LIMIT]让我们假设它是前三名。请看@草莓请检查问题,这完全不同。谢谢,对于条件输出,只有前100名用户忽略了最后一个位置的联系。我没有正确理解这一部分,我应该只忽略最后一个位置的联系?@VIBHUBAROT:我更新了我的答案,提供了更多关于查询行为的信息。
select distinct *, sum(distance) over(partition by user_id) from ...