与oracle的 rownumber() over(partition by xxx  order by xxx )语句类似,即:对表分组后排序

创建测试emp表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DROP TABLE IF EXISTS emp;
CREATE TABLE emp (
  empno decimal(4,0) NOT NULL,
  ename varchar(10) DEFAULT NULL,
  job varchar(9) DEFAULT NULL,
  mgr decimal(4,0) DEFAULT NULL,
  hiredate datetime DEFAULT NULL,
  sal decimal(7,2) DEFAULT NULL,
  comm decimal(7,2) DEFAULT NULL,
  deptno decimal(2,0) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
-- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO emp VALUES ('7369''SMITH''CLERK''7902''1980-12-17 00:00:00''800.00'null'20');
INSERT INTO emp VALUES ('7499''ALLEN''SALESMAN''7698''1981-02-20 00:00:00''1600.00''300.00''30');
INSERT INTO emp VALUES ('7521''WARD''SALESMAN''7698''1981-02-22 00:00:00''1250.00''500.00''30');
INSERT INTO emp VALUES ('7566''JONES''MANAGER''7839''1981-04-02 00:00:00''2975.00'null'20');
INSERT INTO emp VALUES ('7654''MARTIN''SALESMAN''7698''1981-09-28 00:00:00''1250.00''1400.00''30');
INSERT INTO emp VALUES ('7698''BLAKE''MANAGER''7839''1981-05-01 00:00:00''2850.00'null'30');
INSERT INTO emp VALUES ('7782''CLARK''MANAGER''7839''1981-06-09 00:00:00''2450.00'null'10');
INSERT INTO emp VALUES ('7788''SCOTT''ANALYST''7566''1982-12-09 00:00:00''3000.00'null'20');
INSERT INTO emp VALUES ('7839''KING''PRESIDENT'null'1981-11-17 00:00:00''5000.00'null'10');
INSERT INTO emp VALUES ('7844''TURNER''SALESMAN''7698''1981-09-08 00:00:00''1500.00''0.00''30');
INSERT INTO emp VALUES ('7876''ADAMS''CLERK''7788''1983-01-12 00:00:00''1100.00'null'20');
INSERT INTO emp VALUES ('7900''JAMES''CLERK''7698''1981-12-03 00:00:00''950.00'null'30');
INSERT INTO emp VALUES ('7902''FORD''ANALYST''7566''1981-12-03 00:00:00''3000.00'null'20');
INSERT INTO emp VALUES ('7934''MILLER''CLERK''7782''1982-01-23 00:00:00''1300.00'null'10');

需求:按部门分组后显示工资为前三的员工信息

SQL:

1
select from emp as where 3> (select count(*) from emp where deptno = a.deptno and sal < a.sal  )  order by a.deptno ,a.sal

  

解析SQL:

3>...

目的是获取前三条数据,可以多次修改

emp where deptno = a.deptno

目的是确定分组字段

sal < a.sal

排序条件

结果图:

zhuanzi https://www.cnblogs.com/duyunchao-2261/p/7460294.html

MySQL 分组后取每组前N条数据的更多相关文章

  1. SQL分组排序后取每组最新一条数据的另一种思路

    在hibernate框架和mysql.oracle两种数据库兼容的项目中实现查询每个id最新更新的一条数据. 之前工作中一直用的mybatis+oracle数据库这种,一般写这类分组排序取每组最新一条 ...

  2. 记一次有意思的 SQL 实现 → 分组后取每组的第一条记录

    开心一刻 今天,朋友气冲冲的走到我面前 朋友:我不是谈了个女朋友,谈了三个月嘛,昨天我偷看她手机,你猜她给我备注什么 我:备注什么? 朋友:舔狗 2 号! 我一听,气就上来了,说道:走,找她去,这婆娘 ...

  3. mysql 分组后取每个组内最新的一条数据

    首先,将按条件查询并排序的结果查询出来. mysql order by accepttime desc; +---------------------+------+-----+ | acceptti ...

  4. mysql单列去重复group by分组取每组前几条记录加order by排序

    mysql分组取每组前几条记录(排名) 附group by与order by的研究,需要的朋友可以参考下 --按某一字段分组取最大(小)值所在行的数据 复制代码代码如下: /* 数据如下: name ...

  5. MSSQL 分组后取每组第一条(group by order by)

    查询中经常遇到这种查询,分组后取每组第一条.分享下一个SQL语句: --根据 x 分组后.根据 y 排序后取第一条 select * from ( select ROW_NUMBER() over(p ...

  6. SQL获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)

    获取分组后取某字段最大一条记录 方法一:(效率最高) select * from test as a where typeindex = (select max(b.typeindex) from t ...

  7. oracle分组后取某组中最大的值

    查询username,根据fundcode分组,按照date倒序,取date最大的一条数据 select * from ( select username, row_number() over(par ...

  8. Oracle分组后取某列最大值的行数据

    select * from ( select last_comment, row_number() over(partition by employeeid,roadline,stationname ...

  9. Mysql SQL分组取每组前几条记录

    按name分组取最大的两个val: [比当前记录val大的条数]小于2条:即当前记录为为分组中的前两条 > (select count(*) from tb where name = a.nam ...

随机推荐

  1. JDBC的介绍2

    一.基础知识 1. 数据持久化 持久化(persistence):对象在内存中创建后,不能永久存在.把对象永久的保存起来就是持久化的过程.而持久化的实现过程大多通过各种关系数据库来完成. 持久化的主要 ...

  2. Intellij idea上传项目到github

    操作前提 1.安装了 git for windows客户端 2.配置了rsa公钥 3.设置了邮箱和用户名 详情请看上一篇博客http://www.cnblogs.com/520playboy/p/66 ...

  3. Gradle 庖丁解牛(构建生命周期核心托付对象创建源代码浅析)

    [工匠若水 http://blog.csdn.net/yanbober 未经同意严禁转载,请尊重作者劳动成果.私信联系我] 1 背景 上一篇<Gradle 庖丁解牛(构建源头源代码浅析)> ...

  4. 三级级联查询省份名称和编码(保证名称不反复)的SQL语句

    三级级联查询省份名称和编码(保证名称不反复)的SQL语句 1.省份.地市和县级数据库表 2.SQL语句 SELECT DISTINCT t.`province_name`,t.`province_co ...

  5. 带命名空间的XML的dom4j应用<转>

    Element root = document.getRootElement();     List   recordenvlist = document.selectNodes("//gm ...

  6. window上将MongoDB的启动加入到服务中

    在系统管理员的命令行模式中: 进入mongo的安装目录,参照如下: 其中: --dbpath为保存的数据的路径 mongod --bind_ip --serviceName "MongoDB ...

  7. /dev/sdxx is apparently in use by the system; will not make a filesystem here! 解决方法

    在存储上共享了一个500G的空间,映射到Linux系统提供上,环境由2个节点组成. 一. 测试一: 直接mount 用fdisk 格式化之后如下: [root@rac1 u01]# fdisk -l ...

  8. salt '*' state.highstate 报错找不到文件,环境如下No Top file or master_tops data matches found.

    salt '*' state.highstate 报错找不到文件,环境如下No Top file or master_tops data matches found. file_roots:    b ...

  9. 5个界面效果很炫的JavaScript UI 框架

    Web 开发很简单,Web 应用的 UI 开发却很复杂,如果能够利用一些成熟的 UI 框架可以大大的减少开发的复杂度.本文向你介绍 5 款界面效果很不错的 JS 框架. 1. ExtJS ExtJS ...

  10. Qt中delete的问题

    最近项目遇到了一个bug,压力测试ui总会崩溃,gdb调试未果,跑到了库函数,无从查起: (gdb)bt #0 0x4146b1e4 in QWidgetPrivate::drawWidget(QPa ...