我知道如何构建一个SELECT语句,通过产品代码和子模型列表的计数给出排名前10位的条目,但是如何在排名上更深入一级?那就是列出排名前10位的排名前5的排名(按统计)子模型?如何在Oracle中使用级联排序来执行SELECT?
例如:
CREATE TABLE RANKTEST (
"MODEL" VARCHAR2(5 BYTE),
"SUBMODEL" VARCHAR2(5 BYTE) ) ;
insert into ranktest values('A100','R1');
insert into ranktest values('A100','R1');
insert into ranktest values('A100','R1');
insert into ranktest values('A100','R1');
insert into ranktest values('A100','R2');
insert into ranktest values('A100','R2');
insert into ranktest values('A100','R3');
insert into ranktest values('A100','R4');
insert into ranktest values('A103','R5');
insert into ranktest values('A103','R5');
insert into ranktest values('A103','R5');
insert into ranktest values('A103','R5');
insert into ranktest values('A103','X1');
insert into ranktest values('A103','X1');
insert into ranktest values('A103','X1');
insert into ranktest values('A103','X2');
insert into ranktest values('A103','X2');
insert into ranktest values('A103','X3');
insert into ranktest values('A104','R1');
insert into ranktest values('A104','R2');
insert into ranktest values('A105','R2');
insert into ranktest values('A105','R3');
insert into ranktest values('A105','R4');
commit;
SELECT model,
cnt,
rank
FROM
(SELECT model,
COUNT(*) AS cnt,
DENSE_RANK() OVER(ORDER BY COUNT(model) DESC) AS rank
FROM
(SELECT * FROM ranktest)
GROUP BY model)
WHERE rank <=3;
This gives the result:
MODEL CNT RANK
A103 10 1
A100 8 2
A105 3 3
我要寻找的SELECT语法显示前2排子模型的前3排车型
MODEL SUBMODEL CNT RANK SUB-COUNT SUB-RANK
A103 R5 10 1 4 1
A103 X1 10 1 3 2
A100 R1 8 2 4 1
A100 R2 8 2 2 2
A105 R2 3 3 1 1
A105 R3 3 3 1 1
A105 R4 3 3 1 1
(子级型号A105和所有的子模型是使用DENSE_RANK()的结果,至少我认为它看起来应该是这样)。
请分享你的数据表的定义,以及所需的输出。 –