我有两个表员工和部门,其中包含以下数据
emplyee table
empid Ename deptid
1 Ajay 1
2 Vijay 1
3 sanjay 2
4 rajiv 1
5 rohit 2
6 sohit 3
部门表
deptid deptname
1 HR
2 IT
3 A/C
我的问题是如何显示其中拥有最高(第二高或第n高)员工的部门名称。 请帮助我在SQl初学。
答案 0 :(得分:0)
您需要使用内部联接和group by子句,然后您可以使用order by来按照您喜欢的方式对数据进行排序
SELECT d.deptname,
COUNT(e.Ename) AS NoOfEmployees
FROM dept d
INNER JOIN emplyee e ON d.deptid = e.deptid
GROUP BY d.deptid
ORDER BY NoOfEmployees
答案 1 :(得分:0)
SELECT *
FROM
(
SELECT T.*,ROW_NUMBER() OVER (ORDER BY EmpCount DESC) RN
FROM
(
SELECT d.deptid,d.deptname,count(*) EmpCount
FROM department d
JOIN emplyee e on d.deptid=e.deptid
GROUP BY d.deptid,d.deptname
) T
) T1 WHERE RN=2
最后我们会找到RN=2
第二大部门。根据需要将其更改为1,2,3,4,...
。
答案 2 :(得分:0)
select d.deptname
from department d
inner join employee e on e.deptid = d.deptid
group by d.deptname
order by count(d.deptname) desc
这将按照从最高计数到最低计数的顺序为您提供公司名称(按要求)。
您还可以通过deptname进行订购,以便按字母顺序列出具有相同员工数的部门。
如果您想显示行号(例如1,2,3 ......),那么您也可以添加SQL“Over”子句。