Как рассчитать разницу между двумя столбцами

#hive

Вопрос:

У меня есть таблица, в которой содержатся данные за два месяца

введите описание изображения здесь

Напишите запрос, чтобы узнать изменение дохода, полученного в результате покупок с октября по ноябрь.

С данными в виде((Выберите месяц(время события) как значение month_, сумма(цена) как значение octrevenue из финала розничной торговли, где тип события = «покупка» и месяц(время события) = 10 групп по месяцам(время события)) объединения (Выберите месяц(время события) как значение month_, сумма(цена) как значение novrevenue из финала розничной торговли, где тип события = «покупка» и месяц(время события) = 11 групп по месяцам(время события))) выберите*, (novrevenue-octrevenue) как отличие от данных ;

Что не так в приведенном выше запросе ?

Ответ №1:

У Sql мало проблем.

  1. Вы выполняете объединение значений sep и oct, а затем вычитаете их. Это невозможно. Вам нужно рассчитать их в одном ряду.
  2. Месяц без года ничего не стоит и может дать вам неправильные результаты для данных за несколько лет. Таким образом, сумма должна быть сгруппирована по годам.
  3. Где 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