0

嗨,我想编写一个 SQL 语句,它从同一个表中返回计数和计数(不同),但使用不同的 WHERE 子句。

例如

People
-----------------------
ID      Name        Sex
1       Alex        F
2       Alex        M
3       Alex        M
4       Andy        F
5       Andy        M
6       Ann         F
7       Ann         F

在这个例子中,我可以写SELECT (SELECT COUNT(1) FROM People), (SELECT COUNT(DISTINCT Name) FROM People),但是 SELECT 太多了。所以我改写SELECT COUNT(1), COUNT(DISTINCT Name) FROM People

但是,如果我想返回类似SELECT (SELECT COUNT(1) FROM People), (SELECT COUNT(DISTINCT Name) FROM People WHERE Sex='M'). 你如何像上面那样做同样的事情来减少 SELECT?

我不知道这是否相关,我知道我可以编写类似SELECT COUNT(1), SUM(CASE WHEN Sex='M' THEN 1 ELSE 0 END) FROM People在一个 SELECT 中具有不同 WHERE 子句的东西,但这仅适用于 COUNT,它不处理 DISTINCT。当需要 DISTINCT 时如何使用它?

数据库是 SQL Server 2008 R2,谢谢

4

2 回答 2

4

试试这个:

Select count(id), count(distinct case when sex = 'M' then name else null end)
From people

您可以在 SQL fiddle 中看到它:

于 2012-11-11T08:17:39.977 回答
0

您需要显示两个分组操作的结果,因此 union 可以帮助您:

SELECT 'Full' AS 'Grouping Type', count(*) AS 'Count' FROM people
UNION
SELECT 'Men', count(DISTINCT name) FROM people WHERE sex = 'M'
于 2012-11-11T08:24:24.290 回答