Доброго времени суток!
У меня есть следующая таблица:
year month value
2015 1 100
2015 2 600
2015 3 50
2016 2 300
2016 4 500
2016 8 800
2017 5 20
2017 7 40
2017 10 170
2017 12 600
и я хотел бы посчитать долю каждого месяца по отношению к году.
В чарте я могу это сделать следующим образом:
sum(total<month> value)/sum(total<year> value)
Подскажите, как можно сделать подобные вычисления в скрипте на уровне data loader-а?
Благодарю!
Привет
t1:
LOAD * INLINE [
year, month, value
2015, 1, 100
2015, 2, 600
2015, 3, 50
2016, 2, 300
2016, 4, 500
2016, 8, 800
2017, 5, 20
2017, 7, 40
2017, 10, 170
2017, 12, 600
];
left join (t1)
LOAD year, sum(value) as TotalYear
resident t1
Group by year;
left join (t1)
LOAD year, month, round(value/TotalYear*100,0.01) as X
resident t1;
Весь смысл в первой связи, посредством которой к каждой записи присоединяется итоговое значение по полю/полям связи.
Спасибо большое!
Работает.
Но если в таблице имеется большое количество записей, скрипт не выполняется. Это уже скорее проблема железа.
Идет не хватка памяти? Тогда разбивайте данные на части (например, по годам, или по количеству строк).
или по какой причине не выполняется скрипт?
Join - затратная функция, плюс с группировкой.
Следите за памятью при выполнении скрипта.
Можно попробовать использовать временные таблицы, когда каждый этап преобразования работает с загрузкой через load а не resident.
Надо ставить эксперименты и сравнивать.