Функция ранжирования дает неверное ранжирование

select distinct a.pattern ,convert(numeric(18,0) ,isnull(b.[DCount]as [DCount]
,DENSE_RANK () OVER ( Partition by a.pattern order by b.[DCount]desc ) as [Rank]  
from a, b

Выводит как

Pattern Dcount  Rank
A   0   1
A   0   1
A   0   2
A   0   2
B   0   2
B   0   2
B   0   2
B   0   2
C   0   2
C   0   2
C   0   2

В то время как требуемый вывод

Pattern Dcount  Rank
A   0   1
A   0   1
A   0   1
A   0   1
B   0   1
B   0   1
B   0   1
B   0   1
C   0   1
C   0   1
C   0   1

Код не работает из-за отсутствия круглых скобок

JohnHC 09.10.2018 14:31

Как насчет 1 as rank? Зачем нужна функция?

Gordon Linoff 09.10.2018 14:45

Будьте уверены, функция RANK работает, как описано в документации, как и функция DENSE_RANK. Однако ваш запрос не анализируется (неправильные скобки для начала), и вы не объясняете свои ожидания. Очень сложно ответить без дополнительной информации.

Jodrell 09.10.2018 14:55
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
3
244
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

используйте DENSE_RANK ниже

select * ,DENSE_RANK () OVER ( order by Pattern, Dcount) as rn from t
Ответ принят как подходящий

Возможно, вам просто нужен рейтинг по dcount. Если так:

select distinct a.pattern, convert(numeric(18,0),
       coalesce(b.DCount, 0) as DCount,
       dense_rank() over (order by b.[DCount] desc) as [Rank]  
from a cross join b;

Попробуйте это: вам нужно разделить по Pattern, dcount и заказать только по шаблону

демонстрация

select *,dense_Rank() over(partition by Pattern,dcount order by Pattern) from tablename

Другие вопросы по теме