我正在努力获得特定用户拥有的特定赛道的特定单圈时间的排名。
此表中有多个行(圈数)用于特定用户。所以我正在尝试GROUP BY,如FIND_IN_SET的子查询中所见。
现在MySQL(最新版本)抱怨我的session_id,user_id,track_id,持续时间没有聚合为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
非常感谢任何帮助。
答案 0 :(得分:0)
如果我没有弄错的话,问题出现在这里(为了清楚起见):
SELECT user_id,track_id,any_value(duration)
FROM session_lap_times
GROUP BY user_id
查询可能正在调整,因为track_id在select中而不在group by中。这意味着该子选择并不是独立的,并使整个事情失败。
尝试将track_id添加到您的论坛并从那里进行调整。
答案 1 :(得分:0)
您正在按user_id进行分组,但您没有在select中进行任何聚合或在以下子查询中进行聚合
选择 USER_ID,any_value(track_id),any_value(持续时间) FROM session_lap_times GROUP BY user_id
您在以下子查询中的错误上下文中使用GROUP_CONCAT,因为您没有对临时表排名中的任何列进行分组。
(SELECT GROUP_CONCAT(持续时间ORDER BY持续时间ASC)FROM (SELECT user_id,track_id,any_value(duration) FROM session_lap_times GROUP BY user_id,track_id)AS aa WHERE track_id = s1.track_id) )作为排名