你印象最深的一道SQL题目是什么?
写题时遇见的一道SQL
有一个数据表 student,包含以下列:id、name和score。每个学生都有一个唯一的ID,name 是学生的姓名,score 是该学生的分数。编写一个 SQL 查询,使用以下条件筛选前三个最高分数的学生:
CREATE TABLE student( id INT, name VARCHAR(100), score INT );
INSERT INTO student VALUES (1, 'AAA', 80); INSERT INTO student VALUES (2, 'BBB', 67); INSERT INTO student VALUES (3, 'CCC', 92); INSERT INTO student VALUES (4, 'DDD', 91); INSERT INTO student VALUES (5, 'EEE', 88); INSERT INTO student VALUES (6, 'FFF', 95); INSERT INTO student VALUES (7, 'GGG', 87); INSERT INTO student VALUES (8, 'HHH', 90); INSERT INTO student VALUES (9, 'III', 79);
想了好久,发现这个问题可以使用 RANK() 函数和子查询来解决。以下是解决方案: SELECT * FROM ( SELECT *, RANK() OVER (ORDER BY score DESC) AS rank FROM student ) as s WHERE s.rank
这个方案首先对学生表进行了一个子查询,并且使用 RANK() 函数来为每个学生成绩进行排名。然后,它在查询结果中找到排名前三的学生。 如果有多个学生分数一样,排名可能会出现重复。如果不希望重复排名,可以使用 DENSE_RANK() 函数来代替 RANK()。
赞2
踩0