#hive
Вопрос:
У меня есть таблица, в которой содержатся данные за два месяца
Напишите запрос, чтобы узнать изменение дохода, полученного в результате покупок с октября по ноябрь.
С данными в виде((Выберите месяц(время события) как значение month_, сумма(цена) как значение octrevenue из финала розничной торговли, где тип события = «покупка» и месяц(время события) = 10 групп по месяцам(время события)) объединения (Выберите месяц(время события) как значение month_, сумма(цена) как значение novrevenue из финала розничной торговли, где тип события = «покупка» и месяц(время события) = 11 групп по месяцам(время события))) выберите*, (novrevenue-octrevenue) как отличие от данных ;
Что не так в приведенном выше запросе ?
Ответ №1:
У Sql мало проблем.
- Вы выполняете объединение значений sep и oct, а затем вычитаете их. Это невозможно. Вам нужно рассчитать их в одном ряду.
- Месяц без года ничего не стоит и может дать вам неправильные результаты для данных за несколько лет. Таким образом, сумма должна быть сгруппирована по годам.
- Где conditionk должен быть на initcaped event_type =Покупка . В противном случае он никогда не найдет совпадения.
Теперь решение вашей проблемы приведено ниже. Это даст вам разницу в течение года. В зависимости от ваших требований вы можете добавлять столбцы в группу по. Если вам нужны все столбцы, вам необходимо объединить приведенный ниже запрос с таблицей розничной торговли.
Select yr, octsum-septsum as diff From (Select Sum(case when lower(sep.event_type) = 'purchase' and month(event_time)=10 then price else 0 end ) octsum, Sum(case when lower(sep.event_type) = 'purchase' and month(event_time)=9 then price else 0 end ) septsum, Year(event_time) yr From retailfinal Group by Year(event_time) )Rs