您好我需要一些关于编写简单查询的小帮助。我想根据部门中的最大员工数显示结果。
这是我的表
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名员工,所以它会接下来,等等
提前致谢,
纳古
答案 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
最好的问候