#sql #hive #subquery #impala
#sql #улей #подзапрос #импала
Вопрос:
У меня есть такой вопрос:
SELECT MONTH_ID, 'Total' AS cola, colb FROM ( SELECT A.*, ROW_NUMBER()OVER(PARTITION BY MONTH_ID,col3 ORDER BY col4 DESC) AS ROWN FROM ( SELECT A.*, B.col3 FROM table1 A LEFT JOIN table2 B ON A.col1 = B.col1 ) A ) WHERE ROWN=1 GROUP BY MONTH_ID
Если я создам промежуточную таблицу с подзапросами, этот запрос может сработать. Но когда я запущу все это, Impala вызовет: «Исключение анализа: Синтаксическая ошибка в строке 12:не определено: ГДЕ СТРОКА = 1 ^ Встречается: ГДЕ ожидается: КАК, ПО УМОЛЧАНИЮ, ИДЕНТИФИКАТОР, ВЫЗВАННЫЙ: Исключение: Синтаксическая ошибка»
Я попытался запустить это в улье, отображается другая ошибка: «Ошибка при компиляции инструкции: СБОЙ: Исключение синтаксического анализа строка 20:4 не может распознать ввод рядом с» ГДЕ «»СТРОКА» » = «в источнике подзапроса»
Затем я попробовал тот же запрос в oracle, он работает…
Кто-нибудь может объяснить, почему это происходит и как это решить? Спасибо вам за вашу помощь 😉
Ответ №1:
Подзапрос должен иметь такой псевдоним (см. Комментарий в коде).:
SELECT MONTH_ID, 'Total' AS cola, colb FROM ( SELECT A.*, ROW_NUMBER()OVER(PARTITION BY MONTH_ID,col3 ORDER BY col4 DESC) AS ROWN FROM ( SELECT A.*, B.col3 FROM table1 A LEFT JOIN table2 B ON A.col1 = B.col1 ) A ) B ----------------------------Alias is a must -------------- WHERE ROWN=1 GROUP BY MONTH_ID, colb -----All columns which are not aggregated and not constants should be in GROUP BY
Комментарии:
1. Большое вам спасибо! Это сработало!!! Оператор group by находится прямо в моем исходном запросе, я просто обленился, когда вводил вопрос xd, но спасибо, что указали.