-- 链接 LINK: https://www.nowcoder.com/practice/b626ff9e2ad04789954c2132c74c0512?tpId=82&tqId=35496&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fdifficulty%3D5%26page%3D1%26pageSize%3D50%26search%3D%26tab%3DSQL%25E7%25AF%2587%26topicId%3D82&difficulty=5&judgeStatus=undefined&tags=&title=
-- 标题 TITLE: SQL270 考试分数(五)
-- 日期 DATE: 2023-02-25

/* 设计思路

**/

-- 题解 SQL
SELECT id, job, score, ranks
FROM (
    SELECT id, job, score,
        ROW_NUMBER() OVER(PARTITION BY job ORDER BY score DESC) AS ranks,
        COUNT(id) OVER(PARTITION BY job) AS num
    FROM grade
) T
WHERE FLOOR((num + 1.0) / 2) <= ranks AND ranks <= CEIL((num + 1.0) / 2)
ORDER BY id

;

-- 数据 DATA ===================================================
drop table if exists grade;
CREATE TABLE  grade(
`id` int(4) NOT NULL,
`job` varchar(32) NOT NULL,
`score` int(10) NOT NULL,
PRIMARY KEY (`id`));

INSERT INTO grade VALUES
(1,'C++',11001),
(2,'C++',10000),
(3,'C++',9000),
(4,'Java',12000),
(5,'Java',13000),
(6,'B',12000),
(7,'B',11000),
(8,'B',9999);