【问题标题】:SQL: how to pick one row for each set of rows with duplicate value in one column?SQL:如何为一列中具有重复值的每组行选择一行?
【发布时间】: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 请检查我的答案。

标签: sql group-by amazon-redshift


【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2016-07-22
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 2013-05-07
      相关资源
      最近更新 更多