獲取所有部門中當前(dept_emp.to_date = 『9999-01-01』)員工當前(salaries.to_date=『9999-01-01』)薪水最高的相關資訊,給出dept_no, emp_no以及其對應的salary,按照部門編號公升序排列。
create
table
`dept_emp`
(`emp_no`
int(11)
notnull
,`dept_no`
char(4
)not
null
,`from_date`
date
notnull
,`to_date`
date
notnull
,primary
key(
`emp_no`
,`dept_no`))
;
create
table
`salaries`
(`emp_no`
int(11)
notnull
,`salary`
int(11)
notnull
,`from_date`
date
notnull
,`to_date`
date
notnull
,primary
key(
`emp_no`
,`from_date`))
;
在mysql中select後出現de.emp_no,則group by後也需要有de.emp_no
select de.dept_no,de.emp_no,
max(s.salary)
from dept_emp de
inner
join salaries s
on de.emp_no=s.emp_no
where s.to_date=
'9999-01-01'
and de.to_date=
'9999-01-01'
group
by de.dept_no
如果有多條薪水最高的記錄,就不能用max了
select currentsalary.dept_no, currentsalary.emp_no, currentsalary.salary
from
//建立maxsalary表用於存放當前每個部門薪水的最大值
(select d.dept_no,
max(s.salary)
as salary
from salaries s
join dept_emp d
on d.emp_no = s.emp_no
where d.to_date =
'9999-01-01'
and s.to_date =
'9999-01-01'
group
by d.dept_no) maxsalary,
//建立currentsalary表用於存放當前每個部門所有員工的編號和薪水
(select d.dept_no, s.emp_no, s.salary
from salaries s
join dept_emp d
on d.emp_no = s.emp_no
where d.to_date =
'9999-01-01'
and s.to_date =
'9999-01-01'
) currentsalary
//限定條件為兩表的dept_no和salary均相等
where currentsalary.dept_no = maxsalary.dept_no
and currentsalary.salary = maxsalary.salary
//最後以currentsalary.dept_no排序輸出符合要求的記錄表
order
by currentsalary.dept_no
牛客SQL練習第57題
使用含有關鍵字exists查詢未分配具體部門的員工的所有資訊。create table employees emp no int 11 notnull birth date date notnull first name varchar 14 not null last name varchar 1...
牛客SQL練習第60題
按照salary的累計和running total,其中running total為前n個當前 to date 9999 01 01 員工的salary累計和,其他以此類推。具體結果如下demo展示。create table salaries emp no int 11 notnull salary...
牛客SQL練習第68題
牛客每天有很多人登入,請你統計一下牛客每個使用者最近登入是哪一天,用的是什麼裝置.有乙個登入 login 記錄表,簡況如下 第1行表示id為2的使用者在2020 10 12使用了客戶端id為1的裝置登入了牛客網 第4行表示id為3的使用者在2020 10 13使用了客戶端id為2的裝置登入了牛客網 ...