gpt4 book ai didi

r - 将动态值添加到 RMySQL getQuery 中

转载 作者:行者123 更新时间:2023-11-30 01:32:33 24 4
gpt4 key购买 nike

是否可以将值传递到 dbGetQuery 中的查询中来自 RMySQL 包。

例如,如果我在字符向量中有一组值:

df <- c('a','b','c')

我想循环遍历这些值,从数据库中为每个值提取特定值。

library(RMySQL)    
res <- dbGetQuery(con, "SELECT max(ID) FROM table WHERE columna='df[2]'")

当我尝试添加对值的引用时,出现错误。想知道是否可以在查询中添加 R 对象的值。

最佳答案

一种选择是在循环内操作 SQL 字符串。目前您有一个字符串文字,'df[2]' 不会被 R 解释为字符以外的任何内容。我的答案中会有一些含糊之处,因为 Q 中的 df 显然不是数据框(它是字符向量!)。像这样的事情会做你想要的。

将输出存储在数值向量中:

require(RMySQL)
df <- c('a','b','c')
out <- numeric(length(df))
names(out) <- df

现在我们可以循环 df 的元素来执行查询三次。我们可以通过两种方式设置循环:i) 将 i 作为数字,用于引用 dfout 的元素,或者ii) 将i依次作为df的每个元素(即a,然后b,...) 。我将在下面展示这两个版本。

## Version i
for(i in seq_along(df)) {
SQL <- paste("SELECT max(ID) FROM table WHERE columna='", df[i], "';", sep = "")
out[i] <- dbGetQuery(con, SQL)
dbDisconnect(con)
}

或者:

## Version ii
for(i in df) {
SQL <- paste("SELECT max(ID) FROM table WHERE columna='", i, "';", sep = "")
out[i] <- dbGetQuery(con, SQL)
dbDisconnect(con)
}

您使用哪种取决于个人品味。第二 (ii) 版本要求您在输出向量 out 上设置与 out 内的数据相同的名称。

话虽如此,假设您的实际 SQL 查询与您发布的查询类似,您是否不能在单个 SQL 语句中使用 GROUP BY 子句来对数据进行分组在计算max(ID)之前?像这样在数据库中做简单的事情可能会快得多。不幸的是,我没有可用的 MySQL 实例,而且我的 SQL-fu 目前很弱,所以我无法给出这样的示例。

关于r - 将动态值添加到 RMySQL getQuery 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17294136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com