我正在尝试获取特定用户拥有的特定赛道的特定单圈时间的排名。
此表中有针对特定用户的多行(圈)。因此,我尝试按 FIND_IN_SET 的子查询中所示的方式进行 GROUP BY。
现在MySQL(最新版本)提示我的session_id,user_id,track_id,duration没有为GROUP BY聚合。
我不明白为什么它会提示这一点,因为 GROUP BY 位于子查询中。
session_lap_times架构:
session_id, int
user_id, int
track_id, int
duration, decimal
这就是我到目前为止所得到的。
SELECT
session_id
user_id,
track_id,
duration,
FIND_IN_SET( duration,
(SELECT GROUP_CONCAT( duration ORDER BY duration ASC ) FROM
(SELECT user_id,track_id,min(duration)
FROM session_lap_times GROUP BY user_id,track_id) AS aa WHERE track_id=s1.track_id)
) as ranking
FROM session_lap_times s1
WHERE user_id=1
它似乎也在尝试对父查询强制执行分组规则。
仅供引用,这是我收到的错误:http://imgur.com/a/ILufE
非常感谢任何帮助。
最佳答案
如果我没记错的话,问题就在这里(为了清楚起见,已分解):
SELECT user_id,track_id,any_value(duration)
FROM session_lap_times
GROUP BY user_id
查询可能会失败,因为 track_id 位于 select 中而不是 group by 中。这意味着子选择不会独立存在并导致整个事情失败。
尝试将 track_id 添加到您的组中并从那里进行调整。
关于mysql - 子查询中的 GROUP BY 以获得准确的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39557221/