怎麼獲取全部分組中某列最大的行?以下用乙個樣例來說明下:
一共公司有若干員工。每乙個員工有各自的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 ...