【发布时间】:2015-12-11 03:17:44
【问题描述】:
我有一张如下所示的表格:
HorseID RiderID Total
121 1 2
5 1 150
600 1 20
30 2 500
5 3 10
600 3 10
34 3 10
每匹马可能有多个骑手,反之亦然。 “总数”是指骑手和马匹组合的事故总数。我想要的是一张表,其中包含每个骑手的前 2 个 HorseID,已删除重复数据。 (即,骑手 1 的顶级马是马 5,因为他们一起发生了 150 次事件,而骑手 1 的其他马匹有 20 次和 2 次)。所以我想要的输出是:
HorseID
5
600
30
请注意,当骑手少于 2 匹马时,它应该只抓住前 1 匹。当涉及到骑手 3 时,有一个平局,因此它会根据顺序选择前 2 个 - 但是,这些已经在列表中,所以没有添加(去重部分 - 如果是这样的话,也很乐意在单独的步骤中进行去重快点)。我不介意这是否在平局中获得了 34 号(所以我们在名单上多了一个马匹),任何解决平局的方法都可以。
这是一个玩具数据集,实际数据集要大得多,我将为每个 RiderID 争取前 200 名,所以一个可扩展/高效的解决方案会很棒。
我该怎么办?
【问题讨论】:
-
你需要更好地解释上半部分。在你的脑海中没有出现在屏幕上。然后你需要展示你尝试过的代码
标签: mysql sql select where-clause