sql面試題 (二)
有一張工資表,包含三列:員工編號(id),部門編號(groups),工資(salary)
1. .找到每個部門工資最高的人(包括並列第一)
2. 找到每個部門工資最高的人(只選乙個)
sql語句如下:
declare @g table(id int,groups nvarchar(20),salary money)
insert into @g
select 1,1,1000
union all select 2,1,1000
union all select 3,1,800
union all select 4,2,2000
-- 1
select *
from @g g
where not exists(select 1 from @g where groups=g.groups and salary>g.salary)
select g.*
from @g g
inner join
(
select groups,max(salary) as salary
from @g
group by groups
)t
on g.groups=t.groups
and g.salary=t.salary
-- 2
select min(g.id),g.groups,g.salary
from @g g
inner join
(
select groups,max(salary) as salary
from @g
group by groups
)t
on g.groups=t.groups
and g.salary=t.salary
group by g.groups,g.salary
一定有更好的方法,請不吝賜教。
SQL面試題目之二
查詢某員工的領導 select from emp start with mgr 7902 connect by prior mgr empno 以下摘自 url 今天發現在oracle中的select語句可以用start with.connect by prior子句實現遞迴查詢,connect b...
sql 查詢面試題
表中有a b c三列,用sql語句實現 當a列大於b列時選擇a列否則選擇b列,當b列大於c列時選擇b列否則選擇c列 if object id testtb is not null drop table testtb gocreate table testtb a int b int c int in...
SQL問題(面試題)
面試完後在本地mysql資料庫中重現了該問題 資料表stuscore資訊如下 1 計算每個人的總成績,並且排名 要求顯示字段 學號 姓名 總成績 select stuid as 學號,name as 姓名,sum score as 總成績 from stuscore group by stuid o...