例如,我有很多用户,他们每个人都选择了他们喜欢的游戏,现在在同一个mysql行,他们有建议(竖起大拇指).示例数据库:
(昵称):伦纳德,(推荐):999,(游戏):马里奥;(昵称):Nikky,(建议):1999年,(游戏):反恐精英(昵称):山姆,(建议):199,(游戏):全自动离子交换机
现在我想做的是为每个游戏选择最推荐的用户,而不做双重mysql请求,这可能吗?
SELECT * FROM用户ORDER BY建议DESC
这只是显示所有这些游戏的推荐数量排序,但我想要的是显示1与最推荐的每一个游戏,因为有许多用户有一堆推荐同一个游戏。
5条答案
按热度按时间ukdjmx9f1#
编辑:MySQL 5.7
尽管被接受了,但在原始回复(见下文)中,MySQL 5.6的建议代码没有产生预期结果,而且从MySQL 5.7开始,它是不可执行的。
我推荐这种方法:
当
a.game
等于b.game
且a.recommends
小于b.recommends
时,通过在a
和b
之间执行LEFT_JOIN
运算,我们得到了一个集合,其中a.recommends
的较高值与b.recommends
的空值相关联。使用
WHERE b.recommends IS NULL
,我们将选择限制在我们感兴趣的行。这样,如果同一类别中有两个得分相同的昵称,它们都会被选中,而在前面的代码中不是这样。原始答案:
您可以简单地将
GROUP BY
添加到ORDER BY
:muk1a3rh2#
您可以使用
GROUP BY
子句基于一个列合并多个记录,使用COUNT()
进行计数。如果不查看完整的架构,很难做到,但类似于:SELECT users.*, COUNT(users.recommends) AS total_recommends FROM users ORDER BY recommends DESC GROUP BY game
xn1cxnb43#
可以使用group by。
a9wyjsp74#
小提琴演示:http://sqlfiddle.com/#!9/43486/13/0
4xrmg8kj5#
如果我理解的话,你想要的似乎是:
group by
使得每个游戏仅检索一个用户,并且order by
检索具有高得分的用户。