sql子查询

时间:2009-07-01 08:53:43

标签: sql

您好我需要一些关于编写简单查询的小帮助。我想根据部门中的最大员工数显示结果。

这是我的表

empid           dept           sal
emp001          d001           10000
emp002          d001           10000
emp003          d002           20000
emp004          d001           10000
emp005          d003            5000
emp006          d003            5000

预期结果

empid         dept           sal
emp001         d001           10000
emp002         d001           10000
emp004         d001           10000
emp005         d003            5000
emp006         d003            5000
emp003         d002           20000

所以dept1包含3名员工,所以它应该是第一名,而dept3包含2名员工,所以它会接下来,等等

提前致谢,

纳古

7 个答案:

答案 0 :(得分:3)

答案几乎不取决于您的DBMS! 使用Oracle 8+,您可以使用分析函数:

select empid, dept, sal
from MyTable
order by count(empid) over (partition by dept) desc

答案 1 :(得分:1)

在MySQL中试过这个,并使用此查询:

  

选择e1。 *,count(e2.empid)AS c   来自employees e1 LEFT JOIN   员工e2 ON e1.dept = e2.dept   GROUP BY e1.empid ORDER BY c DESC

我得到了这个结果:

empid   dept    sal     c
emp001  d001    10000   3
emp004  d001    10000   3
emp002  d001    10000   3
emp006  d003    5000    2
emp005  d003    5000    2
emp003  d002    20000   1

然后你可以选择empid来获得emp004之前的emp002等等。)

编辑:更好的MySQL查询是不选择*元素并使用反引号转义所有表和字段名称,如下所示:

  

SELECT`e1``empid`,`e1` .dept`,   `e1``sal`,COUNT(`e2``empid`)AS`c`   来自`employees``e1` LEFT JOIN   `employees``e2`ON`e1``dept` =   `e2``dept` GROUP BY`e1``empid`   订购`c` DESC,`e1``empid`

答案 2 :(得分:0)

您可以计算联接中每个部门的人数,然后按顺序计算:

select e.empid, e.dept e.sal
from employees e
inner join (
    select dept, total = count(*)
    from employees
    group by dept
) headcount hc on hc.dept = e.dept
order by hc.total desc, e.dept, e.sal

答案 3 :(得分:0)

我没有可用于测试此功能的数据库,但尝试给它一个旋转:

SELECT empid, dept, sal
  FROM emp_table
  JOIN
  (SELECT COUNT(empid) [emp_count], dept
     FROM emp_table
     GROUP BY dept
  ) count_table
  ON emp_table.dept = count_table.dept
  ORDER BY
    emp_count DESC
    , empid ASC

SELECT empid, dept, sal FROM emp_table JOIN (SELECT COUNT(empid) [emp_count], dept FROM emp_table GROUP BY dept ) count_table ON emp_table.dept = count_table.dept ORDER BY emp_count DESC , empid ASC

答案 4 :(得分:0)

  

答案几乎不取决于您的DBMS!使用Oracle 8+,您可以使用分析函数:

相同的查询适用于SQL Server 2005 +

还有另一种解决方案可以提供相同的结果和几乎相同的执行计划:

;With DeptCount as 
( Select dept, count(empid) as cnt
    from employees
   group by dept
)
Select e.empid, e.dept e.sal
  From employees e
 Inner Join DeptCount c  
         on e.dept=c.dept
 Order By c.cnt DESC, e.empid ASC 

答案 5 :(得分:0)

没有CTE的版本:

Select e.empid, e.dept e.sal
  From employees e
 Inner Join ( Select dept, count(empid) as cnt
                from employees
               group by dept
            )  c on e.dept=c.dept
 Order By c.cnt DESC, e.empid ASC

答案 6 :(得分:-1)

我不确定您的确切需求,但此查询会为您提供每个部门的员工数量。

SELECT dept, COUNT(*) FROM table GROUP BY dept

最好的问候