每个科目最高的成绩以及对应的同学和科目

47 阅读1分钟
数据准备
CREATE TABLE "public"."gis_student" (
  "name" varchar(255),
  "subject" varchar(255),
  "score" numeric(10,2)
);

INSERT INTO "public"."gis_student" ("name", "subject", "score") VALUES ('小明', '语文', '66.00');
INSERT INTO "public"."gis_student" ("name", "subject", "score") VALUES ('小明', '数学', '67.00');
INSERT INTO "public"."gis_student" ("name", "subject", "score") VALUES ('小明', '英语', '69.00');
INSERT INTO "public"."gis_student" ("name", "subject", "score") VALUES ('小红', '语文', '65.00');
INSERT INTO "public"."gis_student" ("name", "subject", "score") VALUES ('小红', '数学', '99.00');
INSERT INTO "public"."gis_student" ("name", "subject", "score") VALUES ('小红', '英语', '88.00');
INSERT INTO "public"."gis_student" ("name", "subject", "score") VALUES ('小强', '语文', '60.00');
INSERT INTO "public"."gis_student" ("name", "subject", "score") VALUES ('小强', '数学', '72.00');
INSERT INTO "public"."gis_student" ("name", "subject", "score") VALUES ('小强', '英语', '92.00');
SQL语句
我们需要选取出每个科目最高的成绩以及对应的同学和科目
SELECT
t1.name,
t1.subject,
t1.score 
FROM
(
    SELECT 
        t0.name,
        t0.subject,
        t0.score,
        ROW_NUMBER() OVER ( PARTITION BY t0.name ORDER BY t0.score DESC ) AS rn 
    FROM
    gis_student t0 
) t1 
WHERE
t1.rn = 1