我有一个表包含division,group,class,sub_class, 如何在每个子类中选择最高的3个计数
select division ,group,class,sub_class, count(*) as number_cnt,
ROW_NUMBER() over ( partition by division ,group,class
order by number_cnt ) as RowNum
from mydata
order by division,group,class, number_cnt desc
然后我想选择RowNum< = 3 但它返回无法解析number_cnt,但我需要按顺序排列这个number_cnt。
我计算每个sub_class的数量之后的mydata将是这样的 division group class subclass number_cnt
plant fruit tropical fruit banana 10
jackfruit 5
passion fruit 3
coconut 2
我希望为每个分组 - 小组 - 类 - 子类组合
选出前三个计数 division group class subclass number_cnt
plant fruit tropical fruit banana 10
jackfruit 5
passion fruit 3
有任何帮助吗? 感谢。
答案 0 :(得分:0)
SELECT division,
group,
class,
sub_class,
ROW_NUMBER() over ( partition by trade_division ,group,class
order by number_cnt ) as RowNum
FROM
( select division ,
group,
class,
sub_class,
count(*) OVER ( PARTITION BY trade_division,group,class ) AS number_cnt
from my data
)
WHERE RowNum <=3
order by division,group,class, number_cnt desc;
答案 1 :(得分:0)
嗯。假设您想要每个部门/组/类的10个最高子类:
select t.*
from (select division, group, class, sub_class, count(*) as number_cnt,
row_number() over (partition by division, group, class
order by count(*) desc
) as seqnum
from my data
group by division, group, class, sub_class
) t
where seqnum <= 10;
您希望将Windows功能与聚合一起使用。请注意,sub_class
位于group by
,而partition by
位于row_number()
。
注意:您的列名称不一致。而且,您应该不使用SQL关键字(例如group
)作为列名。
答案 2 :(得分:0)
请尝试这是否有帮助。
SELECT * from(
select division ,group,class,sub_class, count(*) as number_cnt,
ROW_NUMBER() over ( partition by trade_division ,group,class
order by number_cnt ) as RowNum
from my data ) a
WHERE RowNum<=3