R循环查询数据库中的所有表

时间:2016-01-15 09:19:23

标签: mysql sql r

我是R的新手,拥有一个包含多个表DatabaseX的数据库a,b,c,d,etc。我想使用R来计算所有这些表中公共属性message_id的行数,并将其单独存储。

我可以使用以下代码计算{{1>} 所有表格

message_id

打印:

list<-dbListTables(con)
# print list of tables for testing
print(list)
for (i in 1:length(list)){
  query <- paste("SELECT COUNT(message_id) FROM ",list[i], sep = "")
  t <- dbGetQuery(con,query)
}
print(t)

但我希望为每个表保留### COUNT(message_id) ## 1 21519 的记录。因此,例如表a = 200,b = 300,c = 500等。

有关如何执行此操作的任何建议吗?

2 个答案:

答案 0 :(得分:1)

正如@ kaiten65建议的那样,一个选项是创建一个执行COUNT查询的辅助函数。在循环之外,我定义了一个数字向量counts,它将存储数据库中每个表的记录数。然后,您可以在表格上执行描述性统计数据以及此记录计数向量。

doCountQuery <- function(con, table) {
    query <- paste("SELECT COUNT(message_id) FROM ", table, sep = "")
    t     <- dbGetQuery(con, query)

    return(t)
}

list <- dbListTables(con)
counts <- numeric(0)       # this will store the counts for all tables

for (i in 1:length(list)) {
    count <- doCountQuery(con, list[i])
    counts[i] <- count[[1]]
}

答案 1 :(得分:0)

您可以使用功能来实现您的需求。例如

readDB <- function(db, i){
     query <- paste("SELECT COUNT(message_id) FROM ",db, sep = "")
     t <- dbGetQuery(con,query)
     return(print(paste("Table ", i, " count:", t)
     }

list<-dbListTables(con)
for (i in 1:length(list)){
    readDB(list[i]);
}

这应该以递归方式打印您的列表,但实际代码是一个很好的可编辑函数。你的输出将是

 "Table 1 count: 2519"
 "Table 2 count: ---- "

有关R函数的更多信息,请访问:http://www.statmethods.net/management/userfunctions.html