SQL:如何为一列中具有重复值的每组行选择一行?
Posted
技术标签:
【中文标题】SQL:如何为一列中具有重复值的每组行选择一行?【英文标题】:SQL: how to pick one row for each set of rows with duplicate value in one column? 【发布时间】:2018-11-27 06:49:51 【问题描述】:我有一个如下所示的表格:
Player | Sport | Rank
A Tennis 1
B Tennis 2
C Tennis 2
D Tennis 2
E Tennis 3
F Soccer 1
G Soccer 2
等等。
对于每个 Sport 相同的分区,我想过滤结果,以便每个 Sport 的每个 Rank 都是唯一的。在我上面的示例中,结果中将选择 B/C/D 之一,我不在乎选择了哪一个。
我希望结果是(其中 D 也可以是 B 或 C):
Player | Sport | Rank
A Tennis 1
D Tennis 2
E Tennis 3
F Soccer 1
G Soccer 2
如何在 SQL 中实现这个逻辑?
【问题讨论】:
@kzs 请检查我的答案。 【参考方案1】:一个好的老式 GROUP BY 应该这样做:
SELECT MIN(player) AS any_player, sport, rank
FROM t
GROUP BY sport, rank
【讨论】:
【参考方案2】:你可以使用ROW_NUMBER:
Select player, sport,rank
FROM
(select player, sport,rank,
ROW_NUMBER() OVER(partition by sport,rank order by player) as rown
FROM table
)a
WHERE a.rown=1;
【讨论】:
以上是关于SQL:如何为一列中具有重复值的每组行选择一行?的主要内容,如果未能解决你的问题,请参考以下文章