mysql - 子查询中的 GROUP BY 以获得准确的排名

标签 mysql

我正在尝试获取特定用户拥有的特定赛道的特定单圈时间的排名。

此表中有针对特定用户的多行(圈)。因此,我尝试按 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/

相关文章:

Mysql触发器语法错误1064

mysql - 在 mysql 中为 View 创建注释

java - JDBC 连接和测试错误

php - 如何将mysql数据库导入toad for mysql?

mysql - SQL 在字符串中查找确定的次数

php - 在 IIS 5.1 中安装 PHP

php - 从多维数组中的查询获取数据

MySQL 为每行选择 N 个最接近的邮政编码

mysql - 我如何设置 mySQL Workbench 的样式

mysql - 将两个 SELECT 查询合并为一个