我有一个查询。
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;
(
*
是为了方便;您应列出所需的列。)