擷取所有分組中某列最大的行,擷取分組列最大

來源:互聯網
上載者:User

擷取所有分組中某列最大的行,擷取分組列最大

怎麼擷取所有分組中某列最大的行?下面用一個例子來說明下:

一共公司有若干員工,每個員工有各自的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做一下笛卡爾積,篩選出我們需要的資料即可。
更多文章請訪問小胖軒 .

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.