我知道如何構建一個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()的結果,至少我認爲它看起來應該是這樣)。
請分享你的數據表的定義,以及所需的輸出。 –