使用两个表显示最高数据值

时间:2013-09-12 13:49:08

标签: sql oracle10g

我有两个表员工和部门,其中包含以下数据

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初学。

3 个答案:

答案 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,...

SQLFiddle demo

答案 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”子句。