R генерирует MySQL выбора операторов - PullRequest
0 голосов
/ 15 февраля 2019

Мне нужно генерировать сложные операторы выбора, которые меняются на основе входного файла при каждом запуске моего скрипта.

У меня есть список имен, который служит моим списком фильтров, и у меня есть оператор выбора, которыйбыло предложено мне в другой теме.Я не уверен, как сгенерировать то, что мне нужно, не сидя в Google в течение следующих 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

1 Ответ

0 голосов
/ 15 февраля 2019

самый простой подход, о котором я мог подумать, это

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")
...