2010-07-08 37 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