当前位置: 首页 > news >正文

mysql前n名_MySQL 选择前n个记录

备注:测试数据库版本为MySQL 8.0

如需要scott用户下建表及录入数据语句,可参考:

scott建表及录入数据sql脚本

一.需求

一某种排序方式,限定结果集只包含一定数目的记录。

例如,返回最高5档工资的员工姓名和工资。

二.解决方案

这种解决方案的关键是两个步骤: 首先按预定方式给行排序,然后限定结果集,只包含感兴趣的行。

2.1 标量子查询方法

使用标量子查询,为每个工资创建一个等级。然后利用等级限制子查询的结果:

select ename,sal

from (

select ( select count(distinct b.sal)

from emp b

where a.sal <= b.sal) as rnk,

a.sal,

a.ename

from emp a

) x

where rnk <= 5;

测试记录:

mysql> select ename,sal

-> from (

-> select ( select count(distinct b.sal)

-> from emp b

-> where a.sal <= b.sal) as rnk,

-> a.sal,

-> a.ename

-> from emp a

-> ) x

-> where rnk <= 5;

+-------+---------+

| ename | sal |

+-------+---------+

| JONES | 2975.00 |

| BLAKE | 2850.00 |

| CLARK | 2450.00 |

| SCOTT | 3000.00 |

| KING | 5000.00 |

| FORD | 3000.00 |

+-------+---------+

6 rows in set (0.00 sec)

2.2 MySQL 8.0 窗口函数方法

MySQL窗口函数功能更强大,代码更简洁

select ename,sal

from (

select ename,sal,

dense_rank() over w as 'dr'

from emp

window w as (order by sal desc)

) x

where dr <= 5

;

测试记录:

mysql> select ename,sal

-> from (

-> select ename,sal,

-> dense_rank() over w as 'dr'

-> from emp

-> window w as (order by sal desc)

-> ) x

-> where dr <= 5

-> ;

+-------+---------+

| ename | sal |

+-------+---------+

| KING | 5000.00 |

| SCOTT | 3000.00 |

| FORD | 3000.00 |

| JONES | 2975.00 |

| BLAKE | 2850.00 |

| CLARK | 2450.00 |

+-------+---------+

6 rows in set (0.00 sec)

相关文章:

  • python 实现字典树_python 字典树(前缀树)基本操作:插入,删除、查找
  • java 1.9_JAVA-1.9-上机
  • java程序入口_浅析java程序入口main()方法
  • java 下载 docx文件_java 写个controller下载文件(word);两种方式
  • javascript java难度_javascript比java难吗?
  • java map cache_java Map实现的cache manager
  • java中的链表类_6.JAVA-链表实例
  • java 二分查找 简书_二分查找的三种模板(C++,Java,Python)
  • 用java实现矩阵链乘积_矩阵最优链乘及Java实现
  • java泛型 语法_Java泛型中的? super T语法
  • java 模块化 组件化_关于模块化、组件化的理解
  • java isnull方法_Java 检查判断变量null(空值)的方法示例代码
  • java容器类的实现_java容器类总结——基于JDK1.8
  • MySQL实验7存储过程_存储过程 · MySQL5.7文档 · 看云
  • php mysql insert 默认_PHP MySQL Insert Into
  • [笔记] php常见简单功能及函数
  • CentOS7简单部署NFS
  • Docker入门(二) - Dockerfile
  • es6要点
  • Fundebug计费标准解释:事件数是如何定义的?
  • Laravel 中的一个后期静态绑定
  • spring-boot List转Page
  • Vue ES6 Jade Scss Webpack Gulp
  • windows下如何用phpstorm同步测试服务器
  • 初识 beanstalkd
  • 翻译:Hystrix - How To Use
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 前端知识点整理(待续)
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何在GitHub上创建个人博客
  • 一文看透浏览器架构
  • 从如何停掉 Promise 链说起
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (12)Linux 常见的三种进程状态
  • (145)光线追踪距离场柔和阴影
  • (26)4.7 字符函数和字符串函数
  • (Java数据结构)ArrayList
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (生成器)yield与(迭代器)generator
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十一)手动添加用户和文件的特殊权限
  • (算法二)滑动窗口
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)德国人的记事本
  • .Net - 类的介绍
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作