对R studio代码进行窗口SQL查询

对R studio代码进行窗口SQL查询,sql,r,tidyverse,Sql,R,Tidyverse,问题: 我想将创建的SQL转换为R studio,在那里将进行2次计算。我可以做一个角色,但我还不懂组合 代码: 选择 f1.ClubName,f1.Percwaarde,f2.Percpunten 从…起 选择 f、 ClubName,sumw.waarde*100.0/sumw.waarde超过PercWaarde 从…起 事实f 参加 w.WDID=f.WDID上的waarde w 分组 f、 俱乐部名称f1 内连接 选择 f、 ClubName,sumu.p*100.0/sumu.p/P

问题:

我想将创建的SQL转换为R studio,在那里将进行2次计算。我可以做一个角色,但我还不懂组合

代码:

选择 f1.ClubName,f1.Percwaarde,f2.Percpunten 从…起 选择 f、 ClubName,sumw.waarde*100.0/sumw.waarde超过PercWaarde 从…起 事实f 参加 w.WDID=f.WDID上的waarde w 分组 f、 俱乐部名称f1 内连接 选择 f、 ClubName,sumu.p*100.0/sumu.p/Perpunten 从…起 事实f 参加 u.StandID上的u=f.StandID 分组 f、 f2上的clubname f2.clubname=f1.clubname 资料

SQL数据已从数据库中检索。但对于R代码,我将使用Excel文件。因此,它可以从数据帧DF中检索

这是我的代码:

df%>% 组别按组别%>% SummaryTot=sumWaarde%>% 变速箱,Perc=tot/sumtot*100
这里最简单的解决方案是通过DBI包加载表。这样,您就可以保持SQL代码的完整性,而不必使用dplyr重新创建它

library(DBI)
driver <- dbDriver("[your driver]")
con <- dbConnect(driver, host = '[your host]', port = '[your port]',  user = '[your user]', password = '[your password]', dbname = '[your dbname]')

df <- dbGetQuery(con, paste0(
  'select
    f1.ClubName, f1.Percwaarde, f2.Percpunten
from
    (select 
         f.ClubName, sum(w.waarde) * 100.0 / sum(sum(w.waarde)) over() PercWaarde
     from 
         fact f 
     join 
         waarde w on w.WDID = f.WDID
     group by 
         f.clubname) f1 
inner join 
    (select 
         f.ClubName, sum(u.p) * 100.0 / sum(sum(u.p)) over() Percpunten
     from 
         fact f 
     join 
         uitslag u on u.StandID = f.StandID
     group by 
        f.clubname) f2 on f2.ClubName = f1.ClubName
    '))

这里最简单的解决方案是通过DBI包加载表。这样,您就可以保持SQL代码的完整性,而不必使用dplyr重新创建它

library(DBI)
driver <- dbDriver("[your driver]")
con <- dbConnect(driver, host = '[your host]', port = '[your port]',  user = '[your user]', password = '[your password]', dbname = '[your dbname]')

df <- dbGetQuery(con, paste0(
  'select
    f1.ClubName, f1.Percwaarde, f2.Percpunten
from
    (select 
         f.ClubName, sum(w.waarde) * 100.0 / sum(sum(w.waarde)) over() PercWaarde
     from 
         fact f 
     join 
         waarde w on w.WDID = f.WDID
     group by 
         f.clubname) f1 
inner join 
    (select 
         f.ClubName, sum(u.p) * 100.0 / sum(sum(u.p)) over() Percpunten
     from 
         fact f 
     join 
         uitslag u on u.StandID = f.StandID
     group by 
        f.clubname) f2 on f2.ClubName = f1.ClubName
    '))