0

こんにちは私は、同じテーブルから異なるWHERE句を使用してcountとcount(distinct)の両方を返す1つのSQLステートメントを記述したいと思います。

例えば

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。1つのSELECTに異なるWHERE句を含めるようなものを記述できることは知っていますが、それはCOUNTの場合のみであり、DISTINCTを処理しません。DISTINCTが必要な場合、これをどのように使用しますか?

DBはSQLServer2008R2です。ありがとうございます

4

2 に答える 2

4

これを試して:

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

ここのSQLフィドルでそれを見ることができます:

于 2012-11-11T08:17:39.977 に答える
0

2 つのグループ化操作の結果を表示する必要があるため、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 に答える