SQL子查询
嗨,我需要一个小的帮助,写一个简单的查询。我想根据部门中员工的最大数量来显示结果。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名员工,因此将未来和这样一来就
在此先感谢,
Nagu
只是在MySQL想这一点,并用此查询:
SELECT E1。 *,COUNT(e2.empid)为C FROM
employees
E1 LEFT JOIN 员工E2 ON e1.dept = e2.dept GROUP BY e1.empid ORDER用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查询将与不选择*元素和逃避所有的表和字段名称与反引号,像这样:
选择`e1`.`empid`,`e1`.`dept`, `e1`.`sal`,COUNT(`e2`.`empid`)AS`C` FROM`雇员`e1`左加入 `雇员``e2` ON`e1`.`dept` = `e2`.`dept` GROUP BY`e1`.`empid` ORDER BY`c` DESC,`e1` .`empid`
我不确定你想要什么,但是这个查询给你每个部门的雇员数量。
SELECT dept, COUNT(*) FROM table GROUP BY dept
问候
是的,但那不是他要求的。 – 2009-07-01 10:47:19
你可以通过计算在每加入部门员工人数,然后顺序:
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
我没有缴费就测试这个数据库,但尝试给这个旋转:
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
答案几乎取决于你的DBMS! 借助Oracle 8+您可以使用分析功能:
select empid, dept, sal
from MyTable
order by count(empid) over (partition by dept) desc
+1不错的查询(也可以在Sql Server 2005+上运行) – Andomar 2009-07-01 09:38:54
答案几乎不取决于你的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
没有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
这只适用于MySQL,因为您在e1.empid上进行了分组,并选择了e1。* – Andomar 2009-07-01 09:37:50