[英]Getting precise percentages from a SQL Query in R using the RODBC Connection
我正在嘗試使用RODBC包在R中創建一個函數,以循環遍歷SQL數據庫中的五個表,以查找每個變量每年的行數,每個變量每年的%null以及缺少的%每個變種每年 我在創建單個函數以提供此准確輸出方面遇到麻煩。 我創建了一個輸出總計數和null百分比的函數,但似乎無法使它直接產生准確的百分比缺失-它似乎是舍入為整數,而不是始終舍入或舍入。 下面是我的代碼。 任何幫助,將不勝感激。
PctNull <- sqlQuery(channel, "select
[EVENT_YEAR] AS 'YEAR',
COUNT(*) AS 'TOTAL',
(((COUNT(CASE WHEN MOTHER_EDUCATION_TRENDABLE = -1 THEN 1 END))*100)/COUNT(*)) AS 'PctMiss',
(((COUNT(*) - COUNT(MOTHER_EDUCATION_TRENDABLE))*100)/COUNT(*)) AS 'PctNull'
from [GA_CMH].[dbo].[BIRTHS]
GROUP BY [EVENT_YEAR]
ORDER BY [EVENT_YEAR]")
這是一種已知的SQL Server情況,其中必須將整數列(如果用於表達式中) 轉換為小數 ,您可以通過在表達式中使用至少一個十進制值或使用CAST
或CONVERT
顯式地進行隱式CONVERT
。
對於隱式轉換,請將COUNT()
值乘以100.00(帶有2個十進制值)或將整個值乘以1.00:
PctNull <- sqlQuery(channel,
"SELECT [EVENT_YEAR] AS 'YEAR',
COUNT(*) AS 'TOTAL',
(((COUNT(CASE WHEN MOTHER_EDUCATION_TRENDABLE = -1
THEN 1
END)) * 100.00) / COUNT(*)) AS 'PctMiss',
(((COUNT(*) - COUNT(MOTHER_EDUCATION_TRENDABLE)) * 100.00) /
COUNT(*)) AS 'PctNull'
FROM [GA_CMH].[dbo].[BIRTHS]
GROUP BY [EVENT_YEAR]
ORDER BY [EVENT_YEAR]")
對於顯式轉換,請使用CAST
專門聲明類型和精度:
(((CAST(COUNT(CASE WHEN MOTHER_EDUCATION_TRENDABLE = -1
THEN 1
END)) * 100) AS DECIMAL(10,2)) / COUNT(*))
或CONVERT
:
(((CONVERT(DECIMAL(10,2), COUNT(CASE WHEN MOTHER_EDUCATION_TRENDABLE = -1
THEN 1
END)) * 100)) / COUNT(*))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.