与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. 按关键字搜索自己的CSDN博客

    CSDN居然没有搜索自己博客的功能!如果博客写多了后将很难查找. 搜到的办法居然要靠谷歌... 在谷歌输入关键词,格式如下: <要检索的关键词> site:blog.csdn.net/&l ...

  2. __attribute__((weak, alias())))

    参考gcc的reference: 弱符号: 若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak symbol(弱符号),则这些全局符号不会引发重定义错误.链接器会忽略弱符号,去 ...

  3. Server 2008作为打印服务器的四大错误解决方案

    http://os.51cto.com/art/201004/197322.htm http://os.51cto.com/art/201004/197322_1.htm http://os.51ct ...

  4. QML vs WEB

    UI领域, 如果是桌面应用,QML可以更快速.如果是手机UI,H5绝对占优. 移动设备已经为各行业的HMI的响应性和用户友好性设定了标准.汽车,医疗设备,工业自动化系统和消费电子产品制造商现在希望为其 ...

  5. CentOS 下 MySQL 5.7 编译安装

    MySQL5.7主要特性: 1—更好的性能:对于多核CPU.固态硬盘.锁有着更好的优化,每秒100W QPS已不再是MySQL的追求,下个版本能否上200W QPS才是吾等用户更关心的 2—更好的In ...

  6. font-face自定义字体

    做网站的时候,有时候会遇到某些字体系统里面没有自带.可能更多的时候我们会选择以图替文的方式来做.用图片的话不利于图片的放大缩小,更好的办法是我们可以自定义字体. 当然,在实际运用中我们需要权衡一下自定 ...

  7. jquery easyui datagrid 动态 加载列

    实现方式: 首先根据输入的sql语句获得相关的列名称返回给前台,然后在datagrid中动态加载列,接着根据查询条件(包括sql语句)获取相关的记录返回给前台用于填充datagrid.从而实现类似or ...

  8. sparkR 跑通的函数

    spark1.4.0的sparkR的思路:用spark从大数据集中抽取小数据(sparkR的DataFrame),然后到R里分析(DataFrame). 这两个DataFrame是不同的,前者是分布式 ...

  9. 【转】MFC 各类型相互转换

    MFC下的常用字符串数据类型表示的含义: L:Long  长 P:Point  指针 C:Const  常量 W:Wchar_t  宽字符 T:TCHAR  STR:String  字符串 在看看MF ...

  10. e585. Converting Between RGB and HSB Colors

    This example demonstrates how to convert between a color value in RGB (three integer values in the r ...