具有排名功能的案例陈述

dor*_*aav 2 sql ranking teradata ranking-functions

你好寻找帮助排名.

我正在使用SQL与Teradata合作,我正在尝试按特定组排序列表,然后按年龄排序.

例如:我想按组排名,然后只对21岁以下选定组下的那些进行排名.

但是,当我使用下面的查询时,它似乎没有考虑组中的成员,只有在它们符合case语句中的条件时才分配.

select
policy, 
age, 
case when age <'21' then  '1'else '0' end as Under21,
case when age <'21' then dense_rank () over (order by group, age desc)  else '0' end as Rank_Under_21
from   Table
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

tri*_*cot 8

您可以使用以下partition by条款:

dense_rank () over (partition by policy, case when age < 21 then 1 end
                    order by group, age desc)
Run Code Online (Sandbox Code Playgroud)

注意:如果age是数字字段(应该是),则不要将其与字符串进行比较:省略引号.如果age是字符串类型,则要注意与另一个字符串的比较将按字母顺序排列,因此'9'>'21'.