【问题标题】:Unable to replicate r script to a sql query无法将 r 脚本复制到 sql 查询
【发布时间】:2020-09-08 09:22:10
【问题描述】:

我正在尝试将 r 脚本复制到 SQL 查询。但是,我无法达到相同的结果。问题是在 SQL 中获取日期的总和,这不像 r 脚本那么容易。

R 逻辑:

R 中使用的逻辑是获取相同日期的总和,并且它还通过说值不必是 nan 来进行过滤。 1L 也使输出列成为整数字段。

Oracle 中的错误:

SQL Error [30100] [HY000]: Invalid aggregate function 'sum(Enl)': Invalid parameter types of function 'sum(Enl)'

R 脚本

subjData<- data.frame(
  `Enl` = as.Date(c("2020-01-01", "2020-01-01", "2020-01-01", "2020-01-04", "2020-01-05")),
  check.names = F
)
actual.enrollment <- function() {
  if (any(!is.na(subjData$`Enrl`))) {                        
    e0 <- aggregate(1L * !is.na(subjData$`Enl`), by = list(subjData$`Enl`), FUN = sum)
    colnames(e0) <- c("Date", "Enld")
  } else {
    e0 <- data.frame(
      Date = no.dates,
      `Enld` = no.numbers,
      check.names = F
    )
  }
  e0
}

output:

 Date              Enld
1 2020-01-01          2
2 2020-01-03          1
3 2020-01-04          1
4 2020-01-05          1

已尝试 SQL 查询:

SELECT Enl, 
SUM (Enl) as Enld
FROM subjData 
GROUP BY Enl;

【问题讨论】:

  • 这里的逻辑也有助于您的问题,特别是对于那些可能对 SQL 有经验但对 R 经验较少的人。
  • 添加了,谢谢蒂姆
  • 我不知道NaN 将如何转换为SQL,但SUM 已经忽略了NULL 值,不管这在这里值多少钱。
  • sum() 列与 group_by 列相同?

标签: sql r count sum


【解决方案1】:

数据库抱怨您无法对日期求和。看起来你想要count()

select enl, count(*) as enld
from subjdata 
group by enl;

我不清楚null 值的逻辑应该是什么。如果要过滤掉null 日期,请使用where 子句:

select enl, count(*) as enld
from subjdata 
where enl is not null
group by enl;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-08
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    相关资源
    最近更新 更多