Страница 1 из 1
					
				Перевести запрос SQL в R
				Добавлено: 02 мар 2016, 21:05
				 AnnaK
				Добрый день! Пытаюсь перевести запрос SQL, но не хватает знаний. О merge, aggregate почитала, но не получается все так, как хотелось бы.
select a.id_res, a.period, a.id, a.id1, a.marital,
          sum(b.var) as sum_b, count(b.var) as count_b
from (select id_res, period, id, id1, rank() over (partition by id, id1 order period) as rank, marital
          from table1 where rank=1) as a
left join table2 as b
          on a.id=b.id and a.id1=b.id1
where a.period<b.period
group by a.id_res, a.period, a.id, a.id1, a.marital
			 
			
					
				Re: Перевести запрос SQL в R
				Добавлено: 04 мар 2016, 03:57
				 Игорь Черниенко
				У Вас, видимо, таблицы уже переведены в R? Это пока все, что можно понять из Вашего вопроса :0)
Что за таблицы, какие у них поля? Что нужно получить? Что за СУБД -- судя по всему Postgres? Чем не устраивает 
RPostgreSQL?
 
			
					
				Re: Перевести запрос SQL в R
				Добавлено: 04 мар 2016, 08:24
				 gamm
				в R все нужные инструменты есть, но нужно самому поработать за компилятор запросов SQL, который переводит запросы в последовательность проекций (указание списка столбцов), селекций (построение индекса строк), соединений (merge) и группировок (aggregate) с созданием промежуточных таблиц. Такое делают студенты, когда учат SQL
			 
			
					
				Re: Перевести запрос SQL в R
				Добавлено: 04 мар 2016, 12:56
				 AnnaK
				С чего начать? Есть data.frame table1: id, id1,period(дата в виде числа) и еще какие-то столбцы. Нужно сделать промежуточную таблицу, в которой только те строки, для которых при каждых id, id1 минимальный period. 
Я не знаю, как работать с RPostgreSQL. Почитала документацию, но у меня выдает ошибки. И я не знаю, с чего начинать "самому поработать за компилятор запросов SQL". Я думала, что за вечер напишу этот код, создам нужную таблицу. Перерыла уже столько литературы и в R у меня ничего не получается
			 
			
					
				Re: Перевести запрос SQL в R
				Добавлено: 04 мар 2016, 15:21
				 jerry-maori
				Не морочьтесь на тему "хочу в R, но как SQL"
У вас есть таблица в R
Так и делайте из неё выборку, используя те средства, которые вы умеет в рамках R.
Пусть оно будет коряво и ни разу не оптимально - лишь бы работало. Да, это будет много if-else, промежуточных массивов. Да и фиг с ним. Вы же не на продакшен ваяеете... +- минута на выполнение запроса - не велика цена.
			 
			
					
				Re: Перевести запрос SQL в R
				Добавлено: 04 мар 2016, 17:02
				 gamm
				jerry-maori писал(а):Да, это будет много if-else
не будет, там все вычисляется параллельно через индексы ...
 
			
					
				Re: Перевести запрос SQL в R
				Добавлено: 05 мар 2016, 15:41
				 nickleb
				AnnaK писал(а):С чего начать? Есть data.frame table1: id, id1,period(дата в виде числа) и еще какие-то столбцы. Нужно сделать промежуточную таблицу, в которой только те строки, для которых при каждых id, id1 минимальный period. 
Я не знаю, как работать с RPostgreSQL. Почитала документацию, но у меня выдает ошибки. И я не знаю, с чего начинать "самому поработать за компилятор запросов SQL". Я думала, что за вечер напишу этот код, создам нужную таблицу. Перерыла уже столько литературы и в R у меня ничего не получается
К data.frame sql-запросы через пакет 
sqldf [
https://cran.r-project.org/web/packages/sqldf/sqldf.pdf] 
Некоторые ссылки на примеры работы с 
sqldf в
 R:
1) 
www.r-bloggers.com/make-r-speak-sql-with-sqldf/
2) 
www.burns-stat.com/translating-r-sql-basics/
3) 
anythingbutrbitrary.blogspot.ru/2012/08/manipulating-data-frames-using-sqldf.html
... Результаты внутри-вложенных подзапросов лучше, видимо, "от-sql-ить" сначала в промежуточные data.frame'ы...
 
			
					
				Re: Перевести запрос SQL в R
				Добавлено: 07 мар 2016, 08:12
				 Игорь Черниенко
				Нужно сделать промежуточную таблицу, в которой только те строки, для которых при каждых id, id1 минимальный period.
Это по идее вообще одной строкой 
можно сделать 
			
					
				Re: Перевести запрос SQL в R
				Добавлено: 07 мар 2016, 09:40
				 gamm
				Игорь Черниенко писал(а):Это по идее вообще одной строкой 
можно сделать 
не, низзя ... aggregate()  видит только один столбец, и т.д. Так что строим индексы, и т.д.
 
			
					
				Re: Перевести запрос SQL в R
				Добавлено: 07 мар 2016, 10:28
				 Игорь Черниенко
				Я подумал, что в итоговой таблице должно быть 3 столбца -- id, id1 и min period. Если нужны все остальные поля, то, конечно, строк в скрипте будет не меньше 2-х.
			 
			
					
				Re: Перевести запрос SQL в R
				Добавлено: 09 мар 2016, 04:38
				 Игорь Черниенко
				не, низзя ... aggregate() видит только один столбец, и т.д. Так что строим индексы, и т.д.
А вот и нет, видит и сколько угодно группирующих, и любое число группируемых. Функция одна только.
 
			
					
				Re: Перевести запрос SQL в R
				Добавлено: 09 мар 2016, 05:03
				 gamm
				Игорь Черниенко писал(а):А вот и нет, видит и сколько угодно группирующих, и любое число группируемых. Функция одна только.
вы не о том - функция видит только один столбец. Иначе опять нужны индексы и косвенная адресация таблиц: обрабатывается только один столбец с данными-индексами (номерами строк), группирующих столбцов - один или несколько;  функция получает индексы группы, сама добывает строки из внешней таблицы, и с ними работает.
 
			
					
				Re: Перевести запрос SQL в R
				Добавлено: 11 мар 2016, 04:43
				 Игорь Черниенко
				Видимо, правда не о том. Но задача может быть решена одной строкой :0)