我有一个查询。

SELECT * FROM users LEFT JOIN ranks ON ranks.minPosts <= users.postCount


每次匹配时都会返回一行。通过使用GROUP BY users.id,我将每一行作为一个单独的ID。

但是,当他们分组时,我只会得到第一行。相反,我希望具有ranks.minPosts最大值的行

有没有办法做到这一点,使用两个不同的查询会更快(更少的资源)吗?

最佳答案

假设您要在ranks中只有一列,则可以使用相关的子查询来做到这一点:

SELECT u.*,
       (select r.minPosts
        from ranks r
        where r.minPosts <= u.PostCount
        order by minPosts desc
        limit 1
       ) as minPosts
FROM users u;


如果您需要ranks中的整个行,则将其重新加入:

SELECT ur.*, r.*
FROM (SELECT u.*,
             (select r.minPosts
              from ranks r
              where r.minPosts <= u.PostCount
              order by minPosts desc
              limit 1
             ) as minPosts
      FROM users u
     ) ur join
     ranks r
     on ur.minPosts = r.minPosts;


*是为了方便;您应列出所需的列。)

08-04 03:44