You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL查询累计出行距离Top50的用户

原有SQL的错误点
  • 表关联条件错误:Rides表通过user_id字段关联Users表的主键id,原写法写的t1.id = t2.id是关联两张表的主键,会导致关联结果完全错误。
  • 排序逻辑不全:需求要求累计距离相同的情况下按用户名升序排列,原ORDER BY子句缺少这一排序规则。
  • 未给聚合计算的累计距离字段设置别名,返回结果的列语义不清晰。
  • 不需要使用PARTITION相关的窗口函数:当前需求是全局维度聚合后取排名前50的记录,直接用GROUP BY聚合+TOP取数即可,窗口函数更适用于分组内排名(比如每个城市取出行距离前10的用户)的场景,这里用反而会增加不必要的计算开销。
修正后的SQL语句
SELECT TOP 50
  t1.name AS [用户姓名(user name)],
  SUM(t2.distance) AS 累计出行距离
FROM Users t1
INNER JOIN Rides t2 ON t1.id = t2.user_id
GROUP BY t1.name
ORDER BY
  SUM(t2.distance) DESC,
  t1.name ASC
逻辑说明
  • 修正后的关联条件可以正确匹配每个用户对应的所有出行记录
  • SUM(t2.distance)按用户分组聚合,计算每个用户的累计出行距离
  • 排序规则先按累计出行距离降序,同距离下按用户名升序,完全匹配需求要求
  • TOP 50会严格返回排序后的前50条记录,自动忽略末位的并列情况,符合需求约束

内容的提问来源于stack exchange,提问作者valera_177

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:31:01