如何在 sqldf 查询中包含用户定义的变量?
How to include a user defined variable in sqldf query?
我有一个值列表,我想在将来解析这些值。暂时确保我的格式对于这个查询是正确的。我有这个查询:
var2 = "Application Maintenance"
r = fn$sqldf("Select Iteration, (SUM(Hours) / SUM(Effort)) as Efficiency
From df WHERE Iteration = $var2")
query = sprintf('Select Iteration, (SUM(Hours) / SUM(Effort))
as Efficiency from df WHERE Iteration = %s', var2)
q = sqldf(query)
我在两次尝试中都遇到了错误:result_create(conn@ptr, statement) 中的错误:
附近 "Maintenance": 语法错误
我过去只使用过一次 sqldf,所以我对语法还是陌生的。当我将 $var2 更改为 "Application Maintenance" 时,查询工作得很好,但当我使用用户定义的变量时查询不起作用。
我已经尝试了其他 Whosebug 帖子的解决方案,但我一直收到与上面相同的错误。
如有任何帮助,我们将不胜感激!
编辑:列表迭代的代码(path_list 是一个字符串列表):获取 NULL
'tcltk::as.tclObj(X) 中的错误:无法处理模式 'list' 的对象'
for (var1 in path_list){
query = fn$sqldf("Select Iteration, (SUM(Hours) / SUM(Effort)) as Efficiency
From df WHERE Iteration = '$var1'")
print(query)
}
编辑 2:path_list 包含在这种格式中(在 RStudio 中单击列表时:
Iteration
'Application Maintenance'
'Task'
'QA'
编辑 3:包括前 15 行的示例。这个数据集中有数千个。出于保密原因更改了 'Iteration' 列名称:
我们可以将 $var
括在单引号中
library(sqldf)
fn$sqldf("Select Iteration, (SUM(Hours) / SUM(Effort)) as Efficiency
From df WHERE Iteration = '$var2'")
使用可重现的例子
fn$sqldf("select cyl, (sum(hp)/sum(wt)) as Efficiency from mtcars where new = '$var2'")
# cyl Efficiency
#1 6 34.21462
如果我们循环执行此操作
path_list <- c("Mazda RX4", "Datsun 710", "Valiant")
for(var1 in path_list) print(sqldf(sprintf("select cyl, (sum(hp)/sum(wt)) as Efficiency from mtcars where new = '%s'", var1)))
#cyl Efficiency
#1 6 41.98473
# cyl Efficiency
#1 4 40.08621
# cyl Efficiency
#1 6 30.34682
数据
data(mtcars)
mtcars$new <- row.names(mtcars)
var2 <- "Hornet 4 Drive"
我有一个值列表,我想在将来解析这些值。暂时确保我的格式对于这个查询是正确的。我有这个查询:
var2 = "Application Maintenance"
r = fn$sqldf("Select Iteration, (SUM(Hours) / SUM(Effort)) as Efficiency
From df WHERE Iteration = $var2")
query = sprintf('Select Iteration, (SUM(Hours) / SUM(Effort))
as Efficiency from df WHERE Iteration = %s', var2)
q = sqldf(query)
我在两次尝试中都遇到了错误:result_create(conn@ptr, statement) 中的错误: 附近 "Maintenance": 语法错误
我过去只使用过一次 sqldf,所以我对语法还是陌生的。当我将 $var2 更改为 "Application Maintenance" 时,查询工作得很好,但当我使用用户定义的变量时查询不起作用。
我已经尝试了其他 Whosebug 帖子的解决方案,但我一直收到与上面相同的错误。
如有任何帮助,我们将不胜感激!
编辑:列表迭代的代码(path_list 是一个字符串列表):获取 NULL 'tcltk::as.tclObj(X) 中的错误:无法处理模式 'list' 的对象'
for (var1 in path_list){
query = fn$sqldf("Select Iteration, (SUM(Hours) / SUM(Effort)) as Efficiency
From df WHERE Iteration = '$var1'")
print(query)
}
编辑 2:path_list 包含在这种格式中(在 RStudio 中单击列表时:
Iteration
'Application Maintenance'
'Task'
'QA'
编辑 3:包括前 15 行的示例。这个数据集中有数千个。出于保密原因更改了 'Iteration' 列名称:
我们可以将 $var
括在单引号中
library(sqldf)
fn$sqldf("Select Iteration, (SUM(Hours) / SUM(Effort)) as Efficiency
From df WHERE Iteration = '$var2'")
使用可重现的例子
fn$sqldf("select cyl, (sum(hp)/sum(wt)) as Efficiency from mtcars where new = '$var2'")
# cyl Efficiency
#1 6 34.21462
如果我们循环执行此操作
path_list <- c("Mazda RX4", "Datsun 710", "Valiant")
for(var1 in path_list) print(sqldf(sprintf("select cyl, (sum(hp)/sum(wt)) as Efficiency from mtcars where new = '%s'", var1)))
#cyl Efficiency
#1 6 41.98473
# cyl Efficiency
#1 4 40.08621
# cyl Efficiency
#1 6 30.34682
数据
data(mtcars)
mtcars$new <- row.names(mtcars)
var2 <- "Hornet 4 Drive"