Mar*_*acz 6 sql t-sql sql-server sql-server-2005 aggregate-functions
我需要在一个查询中计算两列中某些数据的出现总和.DB位于SQL Server 2005中.
例如,我有这个表:
Person: Id, Name, Age
Run Code Online (Sandbox Code Playgroud)
我需要在一个查询中得出这些结果:
1.名字为'John'的人数
2.计算'John',年龄超过30岁.
我可以通过这种方式使用子查询来做到这一点(仅作为示例):
SELECT (SELECT COUNT(Id) FROM Persons WHERE Name = 'John'),
(SELECT COUNT (Id) FROM Persons WHERE Name = 'John' AND age > 30)
FROM Persons
Run Code Online (Sandbox Code Playgroud)
但这很慢,我正在寻找更快的方法.
我找到了MySQL的这个解决方案(它几乎解决了我的问题,但它不适用于SQL Server).
您是否知道在一个查询中计算少量计数比使用子查询更好的方法?
Chr*_*fer 16
使用CASE语句可以计算单个查询中的所需内容:
SELECT
SUM(CASE WHEN Persons.Name = 'John' THEN 1 ELSE 0 END) AS JohnCount,
SUM(CASE WHEN Persons.Name = 'John' AND Persons.Age > 30 THEN 1 ELSE 0 END) AS OldJohnsCount,
COUNT(*) AS AllPersonsCount
FROM Persons
Run Code Online (Sandbox Code Playgroud)
使用:
SELECT COUNT(p.id),
SUM(CASE WHEN p.age > 30 THEN 1 ELSE 0 END)
FROM PERSONS p
WHERE p.name = 'John'
Run Code Online (Sandbox Code Playgroud)
在多次访问同一个表时总是更可取的,以便在单个过程中查看它是如何完成的(SELECT语句).它并不总是可能的.
如果您需要在查询中执行其他操作,请参阅Chris Shaffer的回答.