【发布时间】:2016-09-17 03:32:52
【问题描述】:
我编写了以下查询来研究一些用于我的分析的示例方法,并且这项工作很好,我不需要修改此代码。但是我需要理解"",; sep="" 的用法以及dbGetQuery 中的limit 语句。
df <- data.frame(Sample.Num = integer(),
Sample.Mean = integer(),
quant.01 = integer(),
quant.05 = integer(),
quant.10 = integer(),
quant.25 = integer(),
quant.50 = integer(),
quant.75 = integer(),
stringsAsFactors = FALSE)
df[1,] <- NA
for (i in 1:500){
sdf <- dbGetQuery(con,"select col11,col23,col30
from schema.db.name
where col1 in ('value1')
and col2 in ('(v3) - value3')
and col3 in ('v0123 - value4')
order by random()*600000 limit 100")
meansample <- mean(sdf$mileage,na.rm = TRUE)
quant.01 <- quantile(sdf$mileage,na.rm = TRUE,probs = .01)
quant.05 <- quantile(sdf$mileage,na.rm = TRUE,probs = .05)
quant.10 <- quantile(sdf$mileage,na.rm = TRUE,probs = .10)
quant.25 <- quantile(sdf$mileage,na.rm = TRUE,probs = .25)
quant.50 <- quantile(sdf$mileage,na.rm = TRUE,probs = .50)
quant.75 <- quantile(sdf$mileage,na.rm = TRUE,probs = .75)
dbDisconnect(con)
问题:
Col1,2 & 3 有字符值。现在我需要检查 col2 的所有 7 个值和 col3 的 9 个值是否相同。每当我使用 col1,2,3 的任何特定值时,我都需要将它们存储在数据框中,以便在循环结束并以第二个值重新启动之前执行一些操作。
因此需要学习:Add a dynamic value into RMySQL getQuery
我也研究过gsub 和shQuote。尽管有几种组合以及限制语句,但我无法概念化'", df[i], "';", sep = "" 的使用。如果它是一个本地数据库,我可以使用dplyr 包来运行循环。我知道seq_along() 需要一个数值,并且为了通过在 () 查询中设置正确的“正确值”的循环。我确实尝试过 paste0 和 paste arguments 以及 collapse="," 争论,但没有帮助。
我还从下面的帖子中尝试了lapply,但它在 () 查询中不起作用。
How to do dbGetQuery for loop in R
(v3) - value3, (v1) - value1 等是 col 中的实际元素。这是 col2、col3 等属性的代码和描述的组合。
【问题讨论】:
-
col2 in ('(v3) - value3')... 这作为WHERE IN条件毫无意义,而且它的行为肯定不会像你想的那样。 -
@Tim Biegeleisen 抱歉没有清楚地发布。在准备 in () 语句用于 where 子句时,您有什么办法可以解释我使用 '", df[i], "';", sep = "" 吗?
-
如果您的意思是将
col2与文本(v3) - value进行字面比较,那么条件是正确的,但您不需要将WHERE IN与单个值一起使用。相反,你可以说WHERE col2 = '(v3) - value' -
谢谢。从 SQL 的角度来看,我知道 where 和 in 子句。我只是在寻找一些帮助来理解复杂的帖子 How to add a dynamic value into RMySQL getQuery 它有很多有用的概念,但是像我这样的笨蛋却没有得到它背后的知识。非常感谢