获取全部分组中某列最大的行

怎么获取全部分组中某列最大的行?以下用一个样例来说明下:

一共公司有若干员工。每一个员工有各自的id, group_id(部门), salary(工资).如今的问题转变为

求公司各部门最高工资的员工

首先明白一个问题,一个部门的若干个员工可能同一时候拥有最高的工资。须要都列举出来。

看一下员工的数据库表结构(仅仅包括实用的列):

Field Type Null Key Default Extra
id int(11) NO PRI NULL  
group_id int(11) YES   NULL  
salary int(11) YES   NULL  

加入的測试数据例如以下:

id group_id salary
1 1 100
2 1 200
3 1 200
4 2 200
5 2 300

我们须要做的过程例如以下:

    1. 获取各个部门最高的工资
    1. 查找各个部门工资等于最高工资的员工
获取各个部门最高的工资
select group_id, max(salary) as max_salary from employee group by group_id ;

运行后的结果:

group_id max_salary
1 200
2 300
查找各个部门工资等于最高工资的员工
select a.id, a.group_id, a.salary from employee as a, b where a.group_id=b.group_id and a.salary=b.max_salary ;

如果第一运行后的数据存在表b中。

这样就得到了终于的结果:

id group_id salary
2 1 200
3 1 200
5 2 300

我们能够简单的将获取各个部门最高的工资的代码替换b就可以,组合后的语句例如以下:

select a.id, a.group_id, a.salary from employee as a, (select group_id, max(salary) as max_salary from employee group by group_id) as b where a.group_id=b.group_id and a.salary=b.max_salary ;

运行后的结果同样。

总结
我们首先依照部门进行分组,获取每组最大的工资(表b); 之后将表a(原表)与表b做一下笛卡尔积,筛选出我们须要的数据就可以。
很多其它文章请訪问 小胖轩 .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值