2016-04-01 34 views
1

私は、農村部または都市部に位置する組織の割合を調べようとしています。カテゴリ 'Rurality'には、 'Rural'、 'Urban'ヌル'。私は 'Urban'と 'Rural'のパーセンテージをすべての値のパーセンテージとして計算できますが、すべての出現を 'NULL'値で除外します。SQL:特定の値のみに対する百分率での出現数

SELECT Geography_Rurality_DEFRA_Grouped as 'Type', 
COUNT(*) as 'Count', 
(COUNT(Geography_Rurality_DEFRA_Grouped)* 100/(SELECT COUNT(*) FROM [SWFC_Project].[dbo].[Lookup_SchoolLevelIndicators])) AS Perc 
FROM [SWFC_Project].[dbo].[Lookup_SchoolLevelIndicators] 
WHERE Geography_Rurality_DEFRA_Grouped IS NOT NULL 
GROUP BY [Geography_Rurality_DEFRA_Grouped] 
ORDER BY 'Count' desc, Geography_Rurality_DEFRA_Grouped 

そして、私の出力は次のとおりです:現時点では

私が持っている

Type | Count | Perc 
------------------- 
Urban| 78117 | 72 
Rural| 27693 | 25 

私が欲しいのに対し、割合は、97%まで追加ただし「都市」と「農村」へ私の100%、 'NULL'値を除いて。

違いがあれば私はSSMSを使用しています。あなたは上の条件を追加する必要がありますサブクエリで

+0

は* 100.0'任意の違いを作る 'ていますか? – jarlh

+0

サブクエリにWHERE NOT NULLがありません –

答えて

2

このようなNULLではありません:あなたは、単にNULLを除外した、COUNT(Geography_Rurality_DEFRA_Grouped)代わりのCOUNT(*)に切り替えることができます

SELECT Geography_Rurality_DEFRA_Grouped as 'Type', 
COUNT(*) as 'Count', 
(COUNT(Geography_Rurality_DEFRA_Grouped)* 100/
(SELECT COUNT(*) 
FROM [SWFC_Project].[dbo].[Lookup_SchoolLevelIndicators] 
WHERE Geography_Rurality_DEFRA_Grouped IS NOT NULL) AS Perc 
FROM [SWFC_Project].[dbo].[Lookup_SchoolLevelIndicators] 
WHERE Geography_Rurality_DEFRA_Grouped IS NOT NULL 
GROUP BY [Geography_Rurality_DEFRA_Grouped] 
ORDER BY 'Count' desc, Geography_Rurality_DEFRA_Grouped 
1

しかし、SQL Serverは、ウィンドウ表示集計機能をサポートし、あなただけのGROUP SUMが必要になります。

SELECT Geography_Rurality_DEFRA_Grouped AS 'Type', 
    COUNT(Geography_Rurality_DEFRA_Grouped) AS 'Count', 

    100 * COUNT(*)/SUM(COUNT(*)) OVER() AS Perc 
FROM [SWFC_Project].[dbo].[Lookup_SchoolLevelIndicators] 
WHERE Geography_Rurality_DEFRA_Grouped IS NOT NULL 
GROUP BY [Geography_Rurality_DEFRA_Grouped] 
ORDER BY 'Count' DESC, Geography_Rurality_DEFRA_Grouped 
関連する問題