如何限制 SQL 查询中返回的重复项数?

How to limit the number of duplicates returned in a SQL query?

如果我有一个 table 即 Names,它只有名字和姓氏作为列,我想 select 所有内容(名字和姓氏),但是将重复名字的数量限制为 3。例如,

名字 姓氏
约翰 史密斯
约翰 母鹿
瑞安 绿色
麦克 威廉姆斯
约翰 汤普森
约翰 棕色

变成

名字 姓氏
约翰 史密斯
约翰 母鹿
瑞安 绿色
麦克 威廉姆斯
约翰 汤普森

我如何构造一个查询来做到这一点?

您可以使用 window 函数。例如:

select firstname, lastname
from (select t.*,
             row_number() over (partition by firstname order by rand()) as seqnum
      from t
     ) t
where seqnum <= 3;

注意:这 returns 每个名称的随机行。您可以使用 order by 子句控制获取哪些行。