【发布时间】:2010-07-01 19:15:16
【问题描述】:
假设我有一个游戏,在这个游戏中提出问题,人们发表回答并计分,排名前 10 的回答获胜。我有一个存储所有这些信息的 SQL 数据库,所以我可能有诸如用户、问题和响应之类的表。 Responses 表有foreign_keys user_id 和question_id,以及属性total_score。
显然,对于一个特定的问题,我可以检索前 10 个带有顺序和限制的响应:
SELECT * FROM Responses WHERE question_id=? ORDER BY total_score DESC LIMIT 10;
我正在寻找的是一种方法,我可以为特定用户确定他们所有获奖回复的列表(在他们特定问题的前 10 名中)。以编程方式遍历每个响应并查看它是否包含在其问题的前 10 名中很简单,但我想对此进行优化,因此我不进行 N+1 查询,其中 N 是用户提交的响应数.
【问题讨论】:
-
StackOverflow 2.0?抱歉,没办法……
-
哈哈!有趣的是,在您指出之前,我没有意识到我的示例描述了 StackOverflow。这就是我今天的大脑的工作方式。
标签: sql subquery limit greatest-n-per-group