我有這使數據到臨時表,具有字段的查詢:如何計算列中某個值的出現百分比?
nRating INT
agentId INT
agent VARCHAR(50)
評級值可以是代表0「否」,或1表示「是」。在不使用臨時表的情況下,計算每個代理的「是」和「無評分」百分比的最佳方法是什麼?
我們使用MSSQL 2014年
我有這使數據到臨時表,具有字段的查詢:如何計算列中某個值的出現百分比?
nRating INT
agentId INT
agent VARCHAR(50)
評級值可以是代表0「否」,或1表示「是」。在不使用臨時表的情況下,計算每個代理的「是」和「無評分」百分比的最佳方法是什麼?
我們使用MSSQL 2014年
我會用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)
。
好主意。只是一個說明 - 第二個是OP所需要的。 [小提琴](http://sqlfiddle.com/#!6/93558/8)。當然,取決於他們如何使用它們,他們也可能需要將這個平均值乘以100。 – AdamMc331 2014-11-24 17:21:40
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
好吧,想想你通常會如何計算一個百分比。你會採取它出現的次數,超過的記錄總數,再乘以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。
不要擔心「最好的方法」,爲什麼不先試着自己寫這個問題,如果它以某種方式不切實際,低效或有問題,向我們展示這一嘗試,所以我們可以幫助你你的具體問題。 – 2014-11-24 17:04:29