Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 分组变异操作的dbplyr窗口函数_Mysql_R_Dplyr_Dbplyr - Fatal编程技术网

Mysql 分组变异操作的dbplyr窗口函数

Mysql 分组变异操作的dbplyr窗口函数,mysql,r,dplyr,dbplyr,Mysql,R,Dplyr,Dbplyr,我想使用dbplyr/dplyr创建一个组级聚合变量。以下是命令的要点: q = tbl_copy %>% group_by(group_var) %>% mutate(x_agg = min(x)) 但这会产生以下错误: 错误:此数据库不支持窗口函数'min' 奇怪的是,当我使用summary动词时,min的效果很好 q = tbl_copy %>% group_by(group_var) %>% summarise(x_agg = min(x))

我想使用dbplyr/dplyr创建一个组级聚合变量。以下是命令的要点:

q = tbl_copy %>% 
  group_by(group_var) %>%
  mutate(x_agg = min(x))
但这会产生以下错误: 错误:此数据库不支持窗口函数'min'

奇怪的是,当我使用summary动词时,min的效果很好

q = tbl_copy %>% 
  group_by(group_var) %>%
  summarise(x_agg = min(x))

q %>% show_query()
<SQL>
SELECT `group_var`, `x`, MIN(`x`) AS `x_agg`
FROM `my_table`
GROUP BY `group_var`

MySQL不支持窗口函数,这就是dbplyr无法将dplyr代码转换为SQL的原因

当您使用MySQL DB时,通常的解决方法是使用嵌套SQL查询,例如:

选择yt.*,t.x_agg 从yt INTERNAL join表中选择group_var,minx as x_agg 来自yt 分组 关于yt.group\u var=t.group\u var 您可以使用dbGetQuery将上述查询直接发送到MySQL,也可以将此策略转换为dplyr代码:

tbl_副本%>% 内接缝BL\U副本%>% 按组分组变量%>% SummarySex\u agg=minx,by=group\u var
另外请注意,如果您的表足够小,更直接的方法是在内存中执行所有操作,我的意思是:在客户端,即在R中。

是的,我明白了。期望dplyr以编程方式在SQL翻译中编写这些子查询是否合理?我确实进行了很多分组变异,我希望避免用一堆left_join语句重新编写dplyr代码。有点违背了使用dplyr代替关系数据库的许多目的。我同意如果dplyr能够解决这个问题就好了!但我不知道我们是否应该期待它。。。无论如何,在某种程度上,您总是需要编写仔细优化的SQL查询,我不认为这可以通过另一种语言的自动翻译来实现,特别是考虑到每个DBMS都有自己的SQL实现。
> con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
> copy_to(con, mtcars)
> 
> mtcars2 <- tbl(con, "mtcars")
> mtcars2 %>%
+     select(mpg,cyl) %>%
+     group_by(cyl) %>%
+     mutate(mpg_min = min(mpg))
Error: Window function `min()` is not supported by this database