更多关于LeetCoded习题归纳介绍,请参见我博客:
一、DISTINCT关键字使用场景:
1.SELECT DISTINCT column1,column2... :
返回不同值的行,应有于column1、column2所有列而不仅是column1列。
eg:LeetCode题177.. 第N高的薪水
2.COUNT(DISTINCT column1):
对特定列columns中具有不同值的行进行计数。
eg:LeetCode题596. 超过5名学生的课
二、LIMIT关键字
LIMIT m,n :从行m开始的n行。在mysql中,检索出来的第一行为行0。
题596. 超过5名学生的课 (DISTINCT关键字)
思路:GROUP BY 分组,然后HAVING过滤分组
一开始输入以下代码,错误。注意题目中的notes:学生在每个课中不应被重复计算。
SELECT class FROM courses
GROUP BY class
HAVING COUNT(*)>=5;
故需要添加关键字DISTINCT+列名,返回不同的学生名:
SELECT class FROM courses
GROUP BY class
HAVING COUNT(DISTINCT student)>=5;
SELECT class FROM coursesGROUP 故需要添加关键字DISTINCT+列名,返回不同的学生名:BY classHAVING COUNT(DISTINCT student)>=5;
177. 第N高的薪水(LIMIT关键字)
思路:降序排列,然后返回第N-1行开始的第一行:LIMIT N-1,1
一开始输入以下代码,编译错误。这是因为LIMIT后面只能跟常量,不允许跟表达式等。
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
# Write your MySQL query statement below.
SELECT DISTINCT Salary FROM Employee
ORDER BY Salary DESC
LIMIT N-1,1
);
END
调整表达式为LIMIT m,1:
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
declare m int;
SET m=N-1;
RETURN (
# Write your MySQL query statement below.
SELECT DISTINCT Salary FROM Employee
ORDER BY Salary DESC
LIMIT m,1
);
END