mysql - 如何限制 SQL 查询中返回的重复项数?
问题描述
如果我有一个表Names
,它只有名字和姓氏作为列,我想选择所有内容(名字和姓氏),但将重复名字的数量限制为 3。例如,
名 | 姓 |
---|---|
约翰 | 史密斯 |
约翰 | 能源部 |
瑞安 | 绿 |
麦克风 | 威廉姆斯 |
约翰 | 汤普森 |
约翰 | 棕色的 |
变成
名 | 姓 |
---|---|
约翰 | 史密斯 |
约翰 | 能源部 |
瑞安 | 绿 |
麦克风 | 威廉姆斯 |
约翰 | 汤普森 |
我如何构建一个查询来做到这一点?
解决方案
您可以使用窗口函数。例如:
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
子句控制获得哪些行。
推荐阅读
- python - Python, webkit2 gtk - 如何在 python 程序中使用 webkit 中的代理
- emacs - 缓冲组织到乳胶导出
- ios - 使用用户输入的数据到数组中更新 Swift 中的 UIPickerView 的问题
- c# - 结合包含和 EF 中的 where 不起作用
- sql - 更改 DB2 脚本中的分隔符
- html - 我在 html 中遇到 VS Code 自动完成类名的问题
- angular-reactive-forms - 在没有 ngmodel 的情况下,无法在 Reactive-form Angular 中实现两种方式绑定
- javascript - 将 react-select 默认值设置为 Formik 初始状态值
- mysql - 将数据库的sql脚本导入phpmyadmin后出现缺失索引错误的解决方法是什么
- apache-kafka - Spring cloud Stream kafka binder - 主题的自动配置