我正在为一个由5个表和近10年的数据组成的SQL数据库创建一个缺失矩阵。我建立了ODBC连接,并使用R中的RODBC包作为我的工作环境。我正在尝试编写一个函数,它将为每个表输出每年的行数,给定表中给定年份的空值的计数和百分比(值不存在),以及丢失的计数和百分比(问题跳过/未回答)给定表的值。我已经编写了下面的代码,尝试让它在一个变量上运行,然后在它运行后将其转换为函数。但是,当我运行此代码时,total,missing和null值的计数都是相同的,当然百分比是1.我没有收到任何错误消息。我不确定问题出在哪里,重要的是要区分此项目的missing和null。非常感谢任何见解。
test1< - sqlQuery(channel,“
ElectricResistance
“)
test1 $ nullpct< -with(test1,NULL_VAL / TOTAL)
test1 $ misspct< -with(test1,MISS_VAL / TOTAL)
答案 0 :(得分:0)
CASE
汇总中的当前Count
语句将填充1
或0
两者都将被视为Count
聚合,因此您获得的数量相同总计。
归零是一个将在Count
汇总中计算的值,因此默认ELSE
语句中删除CASE
语句中的NULL
部分将填充非匹配条件在COUNT
汇总
SELECT [event_year] AS 'YEAR',
Count(*) AS 'TOTAL',
Count(CASE
WHEN mother_education_trendable = 'NA' THEN 1
END) AS 'NULL_VAL',
Count(CASE
WHEN mother_education_trendable = -1 THEN 1
END) AS 'MISS_VAL'
FROM [GA_CMH].[dbo].[births]
GROUP BY [event_year]
ORDER BY [event_year]
或使用SUM
聚合而不是COUNT
SELECT [event_year] AS 'YEAR',
Count(*) AS 'TOTAL',
SUM(CASE
WHEN mother_education_trendable = 'NA' THEN 1 ELSE 0
END) AS 'NULL_VAL',
SUM(CASE
WHEN mother_education_trendable = -1 THEN 1 ELSE 0
END) AS 'MISS_VAL'
FROM [GA_CMH].[dbo].[births]
GROUP BY [event_year]
ORDER BY [event_year]