【问题标题】:R generate mysql select statementsR生成mysql选择语句
【发布时间】:2019-07-09 02:24:55
【问题描述】:

每次运行我的脚本时,我都需要生成复杂的选择语句,这些语句会根据输入文件发生变化。

我有一个名称列表作为我的过滤器列表,并且我有一个在另一个线程中向我建议的 select 语句。在接下来的 6 个小时里,如果不坐在谷歌上拼凑起来,我不知道如何生成我需要的东西。

我需要为列表中的每个项目创建一个 MAX(CASE... 行。

list <- df$names

list:
1  square
2  ball
3  dog
4  triangle
5  hamster
6  circle
7  yellow
8  cat

suggested SELECT format:
SELECT 
   data.loc
 , data.type
 , MAX(CASE WHEN data.name = 'cat' THEN 1 ELSE 0 END) AS cat
 , MAX(CASE WHEN data.name = 'hamster' THEN 1 ELSE 0 END) AS hamster
FROM 
 data
GROUP BY 
   data.loc
 , data.type

我相信期望的输出是:

SELECT 
   data.loc
 , data.type
 , MAX(CASE WHEN data.name = 'square' THEN 1 ELSE 0 END) AS square
 , MAX(CASE WHEN data.name = 'ball' THEN 1 ELSE 0 END) AS ball
, MAX(CASE WHEN data.name = 'dog' THEN 1 ELSE 0 END) AS dog
, MAX(CASE WHEN data.name = 'triangle' THEN 1 ELSE 0 END) AS triangle
, MAX(CASE WHEN data.name = 'hamster' THEN 1 ELSE 0 END) AS hamster
, MAX(CASE WHEN data.name = 'circle' THEN 1 ELSE 0 END) AS circle
, MAX(CASE WHEN data.name = 'yellow' THEN 1 ELSE 0 END) AS yellow
, MAX(CASE WHEN data.name = 'cat' THEN 1 ELSE 0 END) AS cat
FROM 
 data
GROUP BY 
   data.loc
 , data.type

【问题讨论】:

    标签: r lapply rmysql


    【解决方案1】:

    我能想到的最简单的方法是

    l <- list("Cat", "dog", "bird")
    sqlqry <- "SELECT 
       data.loc
     , data.type"
    for (i in 1:length(l)) {
      sqlqry <- paste0(sqlqry, sprintf(", MAX(CASE WHEN data.name = '%s' THEN 1 ELSE 0 END) AS %s",l[i], l[i]))
      print(sqlqry)
    }
    sqlqry <- paste0(sqlry, "your where clause")
    

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2012-02-29
      相关资源
      最近更新 更多