2013-01-05 45 views
0

我有3個字段名稱,年齡,性別和約定。在sql server中執行COUNT和PERCENTAGE的最佳方式是什麼?

約定有兩種類型的值 - 同意和不同意。

我想要做的是獲得COUNT以及年齡和性別百分比,以及COUNT和年齡百分比以及未達到約定值的性別百分比。

願我們的佈局是這樣的:

AGE   GENDER   AGREED 
93 600 40% Female 700 62% Agreed 
    1300 60%   320 38% Not Agreed 

首先,請記住,我只是做了數不過從上面的例子,我想表明我們所希望的佈局承受具有。

每個年齡將有2組值。那些同意的人數COUNT和他們的百分比 COUNT的那些人沒有達成一致的價值和百分比。

同性別。

我希望這不會造成混淆。

下面是我正在使用的代碼,但相信我在錯誤的軌道上。

非常感謝。

Select gender, age, agreed, count(agreed)totalAgreed,Agreed = convert(VARCHAR,convert(MONEY,100.0 * count(agreed) /(SELECT count(agreed) FROM myTable)), 1) + '%' 

From myTable 
Group By gender, age, agreed 
+1

您無法在標準簡單查詢中的行級別執行百分比,因爲這需要知道在整個查詢處理完畢之前無法使用的總計。您需要嵌套查詢或分兩個階段完成查詢 - 請確定總數,然後重新查詢以完成百分比。 –

回答

0

您只需按性別和年齡聚合得到的計數。你可以用你想要的條件聚合。以下查詢以數字形式獲得計數和百分比。

select gender, age, count(*) as cnt, 
     sum(case when agreed = 'Agreed' then 1 else 0 end) as NumAgreed, 
     sum(case when agreed = 'NotAgreed' then 1 else 0 end) as NotAgreed, 
     avg(case when agreed = 'Agreed' then 1.0 else 0 end) as NumAgreedRatio, 
     avg(case when agreed = 'NotAgreed' then 1.0 else 0 end) as NotAgreedRatio 
from myTable 
group by gender, age 

表格與您所需的表格有點不同。這是否也有效?另外,我並不願意將數字轉換爲百分數,因爲我喜歡將數字保留爲數字。

+0

非常感謝@NYCdotNet和Gordon。 戈登,你的解決方案根本就不對。 首先,NumagreedRatio和NotAgreedRatio均爲0.000。其次,沒有分組。我想我可以補充一點。 NYCdotNet,您的解決方案更接近,但有沒有辦法讓團體更接近彼此? 例如,如果我們顯示彼此相鄰的同意和不同意的性別,它會更好,更清晰。 例如,我添加了一個名爲Race的字段名,值分散。 這將是很好的顯示黑人誰同意和那些誰不同意在旁邊。 –

+0

我的歉意@戈登。你的解決方案很好。 非常感謝。 –

0

看看這個SQL小提琴:

http://sqlfiddle.com/#!3/9cc6d/9

--Returns count of agreed by gender: 
SELECT Gender, Agreed, COUNT(*) as [Count] 
FROM MyTable GROUP BY Agreed, Gender; 

--Returns count of agreed overall: 
SELECT Agreed, COUNT(*) as [Count] 
FROM MyTable GROUP BY Agreed; 

--Returns count of agreed by gender with percentages 
With Overall as (SELECT CAST(COUNT(*) AS FLOAT) as [Count] FROM MyTable) 
    SELECT mt.Gender, mt.Agreed, COUNT(*) as [Count], CAST(COUNT(*) AS FLOAT)/o.Count as [Percentage] 
FROM MyTable mt 
    CROSS JOIN Overall o 
GROUP BY mt.Agreed, mt.Gender, o.Count; 

這應該讓你開始。

如果要將數據集轉換爲單行,可以在表示層中處理該數據集,手動爲每列執行子查詢,或者使用SQL的PIVOT特性,您可以在這裏瞭解到這些信息:http://nycdotnet.blogspot.com/2012/07/pattern-for-pivot.html

相關問題