2010-07-08 63 views
2

我想写一个查询来从同一个表中检索COUNT(of employees with the salary=1000)COUNT(of total no of employees)。 有什么想法?计数问题()

回答

2
select 
    count(*) totalCount, 
    count(case when salary = 1000 then 1 else NULL end) specialCount 
from Employees 

COUNT计数非空行。

+0

这产生了与[@Tom H的答案]相同的执行计划。 http://stackoverflow.com/questions/3207157/problem-with-count/3207303#3207303)。另外,你真的不需要'else NULL',但删除它不会改变执行计划。 – 2010-07-08 19:57:25

+0

@KM:只是把它放在这里,因为大多数人似乎并不知道COUNT实际计数的是什么:)尤其是计数(*)等于计数(1),但如果列可为空,则不计数(列)。 – 2010-07-08 20:01:57

+0

+1,@ToxicAvenger,我同意,大部分不懂COUNT。你的答案与[@Tom H]的答案一样快(http://stackoverflow.com/questions/3207157/problem-with-count/3207303#3207303),并且比在子查询中使用子查询更好选择列表! – 2010-07-08 20:12:37

3
SELECT COUNT(EmployeeID) as 'Total Employees', 
    (SELECT COUNT(EmployeeID) FROM Employees WHERE Salary = 1000) as 'Salaried' 
    FROM Employees 
+1

你会查询同一个表两次吗? – 2010-07-08 19:41:59

+0

在选择列表中使用子查询效率低于单个查询,如[@Tom H. answer](http://stackoverflow.com/questions/3207157/problem-with-count/3207303#3207303)。使用'SET SHOWPLAN_ALL ON'这个查询TotalSubtreeCost比@Tom H的单个查询高出近50%。answer – 2010-07-08 19:51:24

0
select count(*) as employeeCount, 
(select count(*) from employee where salary=1000) as bigmoneyEmployeeCount 
from employee 
5

另一种方法:

SELECT 
    COUNT(*) AS total_employees, 
    SUM(CASE WHEN salary = 1000 THEN 1 ELSE 0 END) AS employees_with_1000_salary 
FROM 
    Employees 
+0

+1,我该怎么做 – 2010-07-08 19:47:16