[英]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.