我无法弄清楚如何按分组类别对数据进行排名。
例如,下面是来自R的mtcars数据集的代码。在oracle中,我想
按某种方式分组,说'' gear',对该组中每辆车的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');
答案 0 :(得分:0)
你可以这样做
<强> SQL Fiddle Demo 强>
SELECT gear,
AVG(mpg) AS avgMpg,
RANK() OVER(ORDER BY AVG(mpg) DESC) as Rank
FROM mtcars
GROUP BY gear