使用 RODBC 连接从 R 中的 SQL 查询中获取精确百分比

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]")

Here is my output and desired format, however I would like to improve my PctMiss accuracy:

这是一种已知的 SQL 服务器情况,如果在表达式中使用整数列,则必须 converted to decimals 您可以通过在表达式中使用至少一个十进制值来隐式地这样做,或者通过使用CASTCONVERT.

对于隐式转换,将您的 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(*))