SQL面試題 (二)

2021-04-13 06:51:43 字數 1718 閱讀 5077

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...