Sql server 计数()的问题
我想写一个查询,从同一个表中检索Sql server 计数()的问题,sql-server,sql-server-2005,Sql Server,Sql Server 2005,我想写一个查询,从同一个表中检索计数(工资=1000的员工)和计数(员工总数)。 有什么想法吗?另一种方法: SELECT COUNT(EmployeeID) as 'Total Employees', (SELECT COUNT(EmployeeID) FROM Employees WHERE Salary = 1000) as 'Salaried' FROM Employees SELECT COUNT(*) AS total_employees,
计数(工资=1000的员工)
和计数(员工总数)
。
有什么想法吗?另一种方法:
SELECT COUNT(EmployeeID) as 'Total Employees',
(SELECT COUNT(EmployeeID) FROM Employees WHERE Salary = 1000) as 'Salaried'
FROM Employees
SELECT
COUNT(*) AS total_employees,
SUM(CASE WHEN salary = 1000 THEN 1 ELSE 0 END) AS employees_with_1000_salary
FROM
Employees
计数非空行。是否要查询同一个表两次?在选择列表中使用子查询的效率低于单个查询(如)。使用
SET SHOWPLAN\u ALL ON
此查询的TotalSubtreeCost比@Tom H的单个查询高出近50%。answerthis生成的执行计划与。另外,您确实不需要使用else NULL
,但是删除它并不会改变执行计划。@KM:只是把它放在这里,因为大多数人似乎不知道实际计数是多少:)特别是计数(*)相当于计数(1),但如果列可为空,则不需要计数(列)…+1,@ToxicAvenger,我同意,大多数人都不懂计数。您的答案与选择列表中带有子查询的答案一样快,而且比选择列表中带有子查询的答案好得多!
SELECT
COUNT(*) AS total_employees,
SUM(CASE WHEN salary = 1000 THEN 1 ELSE 0 END) AS employees_with_1000_salary
FROM
Employees
select
count(*) totalCount,
count(case when salary = 1000 then 1 else NULL end) specialCount
from Employees