zoukankan      html  css  js  c++  java
  • 获取全部分组中某列最大的行

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

    一共公司有若干员工。每一个员工有各自的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做一下笛卡尔积,筛选出我们须要的数据就可以。
    
    很多其它文章请訪问小胖轩.
  • 相关阅读:
    去除vue-router 链接上的#号
    input 实现调用本地摄像头 实现拍照 和拍视频
    vue-cli 安装sass 和 font-awesome 笔记
    linux下alias命令详解
    linux下source命令的基本功能
    在Linux命令行窗口中,怎么向上翻页?
    Android内存监测工具使用
    Activity的Theme主题风格
    ListView中CheckBox错乱解决
    绘图之Canvas学习
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6930908.html
Copyright © 2011-2022 走看看