2014-09-19 72 views
0

我無法弄清楚如何對分組類別中的數據進行排名。按Oracle中的分組類別排序sql

例如,下面是用於從R的mtcars數據集Oracle中的代碼,我想

組被什麼東西,說「齒輪」,平均化MPG該組中的每個轎廂,和顯示各組的平均MPG的排名

select gear, avg(MPG), rank() over (partition by gear order by avg(MPG)) 
FROM mtcars 
group by hp 

而且,如果有人能告訴我我怎麼會由多個團體或「亞」組我將不勝感激。下面的代碼應該

CREATE TABLE MTCARS 
("MPG" NUMBER(5,2), 
"CYL" NUMBER, 
"DISP" NUMBER(5,2), 
"HP" NUMBER, 
"DRAT" NUMBER(5,2), 
"WT" NUMBER(5,2), 
"QSEC" NUMBER(5,2), 
"VS" NUMBER, 
"AM" NUMBER, 
"GEAR" NUMBER, 
"CARB" NUMBER 
) 



INSERT INTO mtcars VALUES ('21','6','160','110','3.9','2.62','16.46','0','1','4','4'); 
INSERT INTO mtcars VALUES ('21','6','160','110','3.9','2.875','17.02','0','1','4','4'); 
INSERT INTO mtcars VALUES ('22.8','4','108','93','3.85','2.32','18.61','1','1','4','1'); 
INSERT INTO mtcars VALUES ('21.4','6','258','110','3.08','3.215','19.44','1','0','3','1'); 
    INSERT INTO mtcars VALUES ('18.7','8','360','175','3.15','3.44','17.02','0','0','3','2'); 
    INSERT INTO mtcars VALUES ('18.1','6','225','105','2.76','3.46','20.22','1','0','3','1'); 
    INSERT INTO mtcars VALUES ('14.3','8','360','245','3.21','3.57','15.84','0','0','3','4'); 
    INSERT INTO mtcars VALUES ('24.4','4','146.7','62','3.69','3.19','20','1','0','4','2'); 
    INSERT INTO mtcars VALUES ('22.8','4','140.8','95','3.92','3.15','22.9','1','0','4','2'); 
    INSERT INTO mtcars VALUES ('19.2','6','167.6','123','3.92','3.44','18.3','1','0','4','4'); 

    INSERT INTO mtcars VALUES ('17.8','6','167.6','123','3.92','3.44','18.9','1','0','4','4'); 

    INSERT INTO mtcars VALUES ('16.4','8','275.8','180','3.07','4.07','17.4','0','0','3','3'); 

    INSERT INTO mtcars VALUES ('17.3','8','275.8','180','3.07','3.73','17.6','0','0','3','3'); 

    INSERT INTO mtcars VALUES ('15.2','8','275.8','180','3.07','3.78','18','0','0','3','3'); 

    INSERT INTO mtcars VALUES ('10.4','8','472','205','2.93','5.25','17.98','0','0','3','4'); 

    INSERT INTO mtcars VALUES ('10.4','8','460','215','3','5.424','17.82','0','0','3','4'); 

    INSERT INTO mtcars VALUES ('14.7','8','440','230','3.23','5.345','17.42','0','0','3','4'); 

    INSERT INTO mtcars VALUES ('32.4','4','78.7','66','4.08','2.2','19.47','1','1','4','1'); 

    INSERT INTO mtcars VALUES ('30.4','4','75.7','52','4.93','1.615','18.52','1','1','4','2'); 

    INSERT INTO mtcars VALUES ('33.9','4','71.1','65','4.22','1.835','19.9','1','1','4','1'); 

    INSERT INTO mtcars VALUES ('21.5','4','120.1','97','3.7','2.465','20.01','1','0','3','1'); 

    INSERT INTO mtcars VALUES ('15.5','8','318','150','2.76','3.52','16.87','0','0','3','2'); 
    INSERT INTO mtcars VALUES ('15.2','8','304','150','3.15','3.435','17.3','0','0','3','2'); 
    INSERT INTO mtcars VALUES ('13.3','8','350','245','3.73','3.84','15.41','0','0','3','4'); 

    INSERT INTO mtcars VALUES ('19.2','8','400','175','3.08','3.845','17.05','0','0','3','2'); 

    INSERT INTO mtcars VALUES ('27.3','4','79','66','4.08','1.935','18.9','1','1','4','1'); 

    INSERT INTO mtcars VALUES ('26','4','120.3','91','4.43','2.14','16.7','0','1','5','2'); 

    INSERT INTO mtcars VALUES ('30.4','4','95.1','113','3.77','1.513','16.9','1','1','5','2'); 
    INSERT INTO mtcars VALUES ('15.8','8','351','264','4.22','3.17','14.5','0','1','5','4'); 
    INSERT INTO mtcars VALUES ('19.7','6','145','175','3.62','2.77','15.5','0','1','5','6'); 
    INSERT INTO mtcars VALUES ('15','8','301','335','3.54','3.57','14.6','0','1','5','8'); 
    INSERT INTO mtcars VALUES ('21.4','4','121','109','4.11','2.78','18.6','1','1','4','2'); 
+1

編輯你的問題,包括您的樣本數據的預期效果。 – 2014-09-19 19:37:29

回答

0

你可以做這樣的

SQL Fiddle Demo

SELECT gear, 
    AVG(mpg) AS avgMpg, 
    RANK() OVER(ORDER BY AVG(mpg) DESC) as Rank 
FROM mtcars 
GROUP BY gear