如何获取AVG列忽略NULL和零值?
我有三列来获得他们的平均值,我尝试使用以下脚本:
SELECT distinct
AVG(cast(ISNULL(a.SecurityW,0) as bigint)) as Average1
,AVG(cast(ISNULL(a.TransferW,0) as bigint)) as Average2
,AVG(cast(ISNULL(a.StaffW,0) as bigint)) as Average3
FROM Table1 a, Table2 b
WHERE a.SecurityW <> 0 AND a.SecurityW IS NOT NULL
AND a.TransferW<> 0 AND a.TransferWIS NOT NULL
AND a.StaffW<> 0 AND a.StaffWIS NOT NULL
AND MONTH(a.ActualTime) = 4
AND YEAR(a.ActualTime) = 2013
Run Code Online (Sandbox Code Playgroud)
我没有得到任何结果,但是三列的值包括NULL和零!
无论如何在获得平均值之前排除空值?
例: AVERAGE(NOTNULL(SecurityW))
有没有一种简单的方法可以排除空值影响平均值?它们似乎算作0,这不是我想要的.我只是不希望把他们的平均考虑,但这里是抓,我不能从结果集中删除它们,因为该记录上有数据,我确实需要.
更新:
例:
select avg(col1+col2), count(col3) from table1
where
group by SomeArbitraryCol
having avg(col1+col2) < 500 and count(col3) > 3
order by avgcol1+col2) asc;
Run Code Online (Sandbox Code Playgroud)
这对我有用,但是平均值不准确,因为它们将空值计为0,这实际上是在抛弃整个平均值.
这是MonetDBLite数据库文件中的mtcars数据。
library(MonetDBLite)
library(tidyverse)
library(DBI)
dbdir <- getwd()
con <- dbConnect(MonetDBLite::MonetDBLite(), dbdir)
dbWriteTable(conn = con, name = "mtcars_1", value = mtcars)
data_mt <- con %>% tbl("mtcars_1")
Run Code Online (Sandbox Code Playgroud)
我想使用dplyr mutate创建新变量并将其添加(提交!)到数据库表中吗?就像是
data_mt %>% select(mpg, cyl) %>% mutate(var = mpg/cyl) %>% dbCommit(con)
Run Code Online (Sandbox Code Playgroud)
这样做时,所需的输出应该相同:
dbSendQuery(con, "ALTER TABLE mtcars_1 ADD COLUMN var DOUBLE PRECISION")
dbSendQuery(con, "UPDATE mtcars_1 SET var=mpg/cyl")
Run Code Online (Sandbox Code Playgroud)
那怎么办