首页 > 解决方案 > 如何限制 SQL 查询中返回的重复项数?

问题描述

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

约翰 史密斯
约翰 能源部
瑞安 绿
麦克风 威廉姆斯
约翰 汤普森
约翰 棕色的

变成

约翰 史密斯
约翰 能源部
瑞安 绿
麦克风 威廉姆斯
约翰 汤普森

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

标签: mysqlsqlpresto

解决方案


您可以使用窗口函数。例如:

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

注意:这将为每个名称返回随机行。您可以使用该order by子句控制获得哪些行。


推荐阅读