(Mysql)sql分组取最大值问题

    相信有很多开发人员都会碰到分组取最大值的问题,以及分组取前几个值或后几个值问题。今天开发中遇到了类似问题,百度学习了一波,自己写了个简单明了的小demo,有兴趣的同学可以参考一下,如有不对的地方请多多指教 咯!

废话不说,上例子:

     首先创建表,插入几个测试数据------

    

 #创建表

create table employee(
           `id` int  PRIMARY key AUTO_INCREMENT,
          `name` varchar(255) not null,
         `dept` varchar(255) not null,
          `salary` int
       )DEFAULT CHARSET=utf8;

#插入几条数据
insert into employee values
(1,'小张','财务部',3000),
(2,'小李','财务部',3100),
(3,'小名','技术部',5000),
(4,'小明','技术部',2000),
(5,'小海','人力部',8000),
(6,'小钱','总监部',12000),
(7,'小花','市场部',2500),
(8,'小焦','市场部',2200),
(9,'小焦','市场部',2200),
(10,'小楠','市场部',3100),
(11,'小寇','市场部',3100);

下面这个是创建并插入的数据展示

(Mysql)sql分组取最大值问题

接下来先说一种取最大值的问题

#查询各个部门薪资最高的员工信息
select * from employee where (dept,salary) in (select dept,max(salary) from employee GROUP BY dept);

查询结果如下

(Mysql)sql分组取最大值问题

市场部有两个人的工资并列第一,所以会查询出两个结果,如果只想查单个结果请看下面这个例子(略略略~~~~)

 

第二种情况,需要排名前几的员工信息

#查询各个部门薪资前两名员工信息分组并排序展示
select e.* from employee e where (select count(*) from employee where e.dept=dept and salary > e.salary)<2;

结果如下

(Mysql)sql分组取最大值问题

这种查询只会查询前两名,如果有并列的情况只会展示两个哦。如果只想查最大的且不展示并列,推荐这种办法啦,小于2改为小于1就可以了。以此类推,前三名、四名都是如此。

 

 

补充一点:如果想查询前三名且还要分组排序的话,可以在第二种情况后面直接order by dept,salary desc 。这样的话就会分组排大小,但是不能总体从高到低,只是组内排序了而已。

 

例子比较简单,希望对你有所帮助!!!