獲取全部分組中某列最大的行

2021-09-07 11:46:47 字數 1520 閱讀 1118

怎麼獲取全部分組中某列最大的行?以下用乙個樣例來說明下:

一共公司有若干員工。每乙個員工有各自的id, group_id(部門), salary(工資).如今的問題轉變為

求公司各部門最高工資的員工
首先明白乙個問題,乙個部門的若干個員工可能同一時候擁有最高的工資。須要都列舉出來。

看一下員工的資料庫表結構(僅僅包括實用的列):

field

type

null

keydefault

extra

idint(11)

nopri

null

group_id

int(11)

yesnull

salary

int(11)

yesnull

加入的測試資料例如以下:

idgroup_id

salary11

1002

120031

2004

220052

300

我們須要做的過程例如以下:

獲取各個部門最高的工資

select group_id, max(salary) as max_salary from employee group

by group_id ;

執行後的結果:

group_id

max_salary

1200

2300

查詢各個部門工資等於最高工資的員工

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中。

這樣就得到了終於的結果:

idgroup_id

salary21

2003

120052

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做一下笛卡爾積,篩選出我們須要的資料就可以。
很多其它文章請訪問

小胖軒.

3 6 2儲存某列最大值的行

任務 查詢最昂貴商品的數量,經銷商和 這可以通過子查詢輕鬆完成 from shop where price select max price from shop article dealer price 0004 d 19.95 其他解決方案是使用left join或排序按 降序的所有行,並使用特定...

根據表中某列去除重複的行

根據表中某列 或者某些列 去除重複的行 例如有表a,有兩行相同的cardid,我們只要隨機的某一行 drop table a drop table b create table a cardid varchar 100 cardcode varchar 100 insert into a cardi...

獲取datable中某行某列的資料

假設該datatable有5行和兩個字段 name phone 我如何訪問第3行的 phone 欄位的值。datatable.rows 2 1 tostring datatable.rows i j tostring i是行,j是列 索引都從0開始 使用datarow!datatable.rows ...