0
Я пытаюсь ранжировать мои данные о продажах, используя функцию rank() over. Вот мой код:Рейтинг в Teradata- SQL
Select
Category as CAT
,units*cost as COST_SALES
,units*retail as RETAIL_COST
,units as UNITS_SOLD
,RANK() OVER (PARTITION BY 1 ORDER BY 3 DESC) AS RANKING
from Table
Where date between current_date-7 and current_date
group by 1
Когда я получу свой результат, он неупорядочен и показывает ранг 1 для всех категорий.
Teradata позволит вам использовать псевдонимы внутри одного и того же запроса. Таким образом, вы можете использовать «RANK() OVER (PARTITION by Category order by Retail_Cost)». – Andrew
Эндрю. , , Это интересно. Как бы он обрабатывал что-то вроде: 'select (x * x) как x, x from (select 10 as x) a'. ANSI не требует порядка оценки выражений, и большинство баз данных не гарантируют его. –
Teradata выполнит этот оператор и вернет два столбца с именем x. Тем не менее, 'select x from (select (x * x) as x, x from (select 10 as x) a) t' сбой с ошибкой« Дублирование столбца X ». Teradata имеет несколько расширений для ANSI SQL. – Andrew