雪地
发布于

MySQL SQL EXISTS 子句作为 LIMIT 使用限制的解决方法失败

正在测试下面的查询,认为它可以让我绕过“不能在子查询中使用 LIMIT”限制。查询运行,但平均值只是所有记录的平均值,其中 MScores.MemberId=1193 AND MScores.=“FSO” 它似乎完全忽略了 EXISTS 子句Div。

该查询应返回特定部门中特定成员的 5 个(或更少)最新分数的滚动平均值。

为什么 EXISTS 子句不会影响结果吗?

  
  SELECT MScores.MemberId, MScores.`Div`, AVG(MScores.Final) AS AvgOfFinal
    FROM qryMatchScores MScores
    WHERE MScores.MemberId=1193 AND MScores.`Div`="FSO" AND 
    EXISTS (
        SELECT MatchDate 
        FROM qryMatchScores MDates
        WHERE 
            MDates.MemberId = MScores.MemberId AND 
            MDates.`Div` = MScores.`Div` AND
            MDates.MatchDate = MScores.MatchDate
        ORDER BY MatchDate DESC
        LIMIT 5
    );
浏览 (19)
点赞
收藏
1条评论
Klustron小助手
试试这个: SELECT MemberId, `Div`, AVG(Final) AS RollingAVG FROM ( SELECT MemberId, `Div`, Final, MatchDate, ROW_NUMBER() OVER (PARTITION BY MemberId, `Div` ORDER BY MatchDate DESC) AS row_num FROM qryMatchScores ORDER BY MemberId, `Div` ) AS MScores WHERE row_num <= 5 GROUP BY MemberId, `Div`;
点赞
评论