2014-11-24 62 views
-1

我有這使數據到臨時表,具有字段的查詢:如何計算列中某個值的出現百分比?

nRating INT 
agentId INT 
agent VARCHAR(50) 

評級值可以是代表0「否」,或1表示「是」。在不使用臨時表的情況下,計算每個代理的「是」和「無評分」百分比的最佳方法是什麼?

我們使用MSSQL 2014年

+2

不要擔心「最好的方法」,爲什麼不先試着自己寫這個問題,如果它以某種方式不切實際,低效或有問題,向我們展示這一嘗試,所以我們可以幫助你你的具體問題。 – 2014-11-24 17:04:29

回答

1

我會用avg()。在一些數據庫中:一些數據庫執行整數運算(特別是SQL Server),所以你想要一個非整數數字。我經常這樣做只是由1.0乘以:

select agentId, avg(rating*1.0) as yes_ratio, avg(1.0 - rating) as no_ratio 
from temptable t 
group by agentid; 

你也可以做到這一點做cast(rating as float)

+0

好主意。只是一個說明 - 第二個是OP所需要的。 [小提琴](http://sqlfiddle.com/#!6/93558/8)。當然,取決於他們如何使用它們,他們也可能需要將這個平均值乘以100。 – AdamMc331 2014-11-24 17:21:40

0
SELECT 
    AgentId, 
    Agent, 
    SUM(CASE WHEN B = 0 THEN 1.00 ELSE 0.00 END)/COUNT(*) AS NEG, 
    SUM(CASE WHEN B = 1 THEN 1.00 ELSE 0.00 END)/COUNT(*) AS POS 
FROM 
    YOURTABLE 
GROUP BY 
    AgentId, 
    Agent 
0

好吧,想想你通常會如何計算一個百分比。你會採取它出現的次數,超過的記錄總數,再乘以100

所以繁殖,它可能是這個樣子:

SELECT (SUM(nRating) * 100/COUNT(*)) AS percentageOfYesRatings 
FROM agentTable 
GROUP BY agentId; 

一個側面說明

這裏需要特別注意的是,SUM()只能在這裏工作,因爲nRating會是1.你真的真的做的是獲得它們的評分爲1的次數。重要的是要記住未來,因爲如果你做了這個例子說ra ting可能在0到5之間,你想得到正面評價的百分比,那麼查詢看起來會有點不同。

事實上,它可能是這個樣子,這是你需要做的就是沒有收視率的百分比是什麼:

SELECT (SUM(CASE WHEN nRating = 0 THEN 1 ELSE 0 END) * 100/COUNT(*)) AS percentageOfNoRatings 
FROM agentTable 
GROUP BY agentId; 

這不是計數0等級的出現次數的數量。要做到這一點,你可以結合查詢。這裏是SQL Fiddle