【发布时间】:2013-11-22 03:33:49
【问题描述】:
我正在尝试获取给定 GROUP BY 条件的 TOP X 结果。 我目前正在使用这样的东西:
SELECT * FROM
(SELECT id
FROM myTable
WHERE id IN (x1, x2, ..., xn) GROUP BY id ORDER BY grade DESC
) t1
INNER JOIN myTable t2 ON t2.id=t1.id
id 是一个非唯一的 INT 索引字段,每个值有多个行。
这将为每个 id 返回我,即成绩最好的行。如何转换它以返回每个 id 的 TOP X 结果?
例如,对于以下数据
id grade
2 10
2 13
2 15
3 20
4 16
4 55
4 45
4 35
4 25
5 1
假设 TOP X 中的 X 为 2,我想获取以下行:
id grade
2 15
2 13
3 20
4 50
4 40
5 1
【问题讨论】:
-
Top x 结果来自哪个表?
-
加了个例子,更清楚了吗?
-
如果有
15 13 13与id = 2的结果怎么办?那你会显示 3 吗? -
如果出现平局怎么办?例如,给定 id 的 3 条记录具有相同的等级?
-
@Przemyslaw Kruglej:如果 SO 成员在同一时刻想法相同怎么办? ;-)
标签: mysql sql group-by query-optimization greatest-n-per-group