LeetCode数据库部分题目

组合两个表(简单)

在这里插入图片描述
在这里插入图片描述
解题

SELECT p.FirstName,p.LastName,a.City,a.State
FROM Person p
LEFT JOIN Address a 
ON p.PersonId=a.PersonId;

在这里插入图片描述

第二高的薪水(简单)

在这里插入图片描述
解题

SELECT 
    IFNULL(
        (SELECT DISTINCT 
            Salary 
        FROM 
            Employee 
        ORDER BY Salary DESC 
        LIMIT 1,1),
        NULL) SecondHighestSalary;

在这里插入图片描述

超过经理收入的员工(简单)

在这里插入图片描述

解题

SELECT 
    IFNULL(e3.n1,NULL) Employee
FROM
    (SELECT 
        e1.Name n1,e1.Salary s1,e2.Name n2,e2.Salary s2
    FROM
        Employee e1,Employee e2
    WHERE
        e2.Id=e1.ManagerId) e3
WHERE
    e3.s1>e3.s2;

在这里插入图片描述

查找重复的电子邮箱(简单)

在这里插入图片描述
解题

# Write your MySQL query statement below
SELECT IFNULL(Email,NULL) Email
FROM (SELECT COUNT(Id) count_id,Email FROM Person GROUP BY Email) p1
WHERE p1.count_id>1;

在这里插入图片描述

SELECT Email 
FROM Person 
GROUP BY Email
HAVING COUNT(Email)>1;

在这里插入图片描述

从不订购的客户(简单)

在这里插入图片描述在这里插入图片描述
解题

# Write your MySQL query statement below
SELECT IFNULL(c.name,NULL) Customers
FROM Customers c
WHERE c.id NOT IN (SELECT o.CustomerId FROM Orders o);

在这里插入图片描述

删除重复的电子邮箱(简单)

解题
该做法要注意删除语句不能作用于查询后修改的表,也就是group by之后应该建临时表来保存

DELETE FROM Person
WHERE Id NOT IN (  
    SELECT id FROM
   (
       SELECT MIN(Id) AS Id 
       FROM Person
       GROUP BY Email
   ) AS temp    
);

在这里插入图片描述
自连接做法

# Write your MySQL query statement below
DELETE p1
FROM Person p1,Person p2
WHERE p1.Email=p2.Email AND p1.Id>p2.Id;

在这里插入图片描述

上升的温度(简单)

在这里插入图片描述

日期的比较要用DATEDIFF函数

# Write your MySQL query statement below
SELECT IFNULL(w1.Id,null) Id
FROM Weather w1,Weather w2
WHERE DATEDIFF(w1.RecordDate, w2.RecordDate) = 1 AND w1.Temperature>w2.Temperature

在这里插入图片描述

大的国家(简单)

在这里插入图片描述
使用OR

# Write your MySQL query statement below
SELECT name,population,area
FROM World
WHERE area>3000000 OR population>25000000

在这里插入图片描述
使用UNION连接子查询,UNION默认DISTINCT

SELECT name, population, area
FROM world
WHERE area > 3000000
UNION
SELECT name, population, area
FROM world
WHERE population > 25000000
;

在这里插入图片描述
通过对比,发现UNION的速度更快

超过5名学生的课(简单)

在这里插入图片描述
在这里插入图片描述

# Write your MySQL query statement below
SELECT IFNULL(class,null) class
FROM courses
GROUP BY class
HAVING COUNT(DISTINCT student)>=5

在这里插入图片描述

有趣的电影(简单)

在这里插入图片描述

  • 用%运算,效率低
# Write your MySQL query statement below
SELECT *
FROM cinema
WHERE description<>"boring" AND id%2=1
ORDER BY rating DESC

在这里插入图片描述

  • 用MOD函数,效率高
# Write your MySQL query statement below
SELECT *
FROM cinema
WHERE description<>"boring" AND MOD(id,2)=1
ORDER BY rating DESC

在这里插入图片描述

交换工资(简单)

在这里插入图片描述
这个好理解,但是效率低

# Write your MySQL query statement below
UPDATE salary
SET sex=IF(sex='f','m','f');

在这里插入图片描述
用CASE表达式
在这里插入图片描述

# Write your MySQL query statement below
UPDATE salary
SET sex=CASE sex WHEN 'f' THEN 'm' ELSE 'f' END;

在这里插入图片描述

重新格式化部门表(简单)

在这里插入图片描述
在这里插入图片描述

# Write your MySQL query statement below
SELECT id,
SUM(CASE `month` WHEN 'Jan' THEN revenue END) Jan_Revenue,
SUM(CASE `month` WHEN 'Feb' THEN revenue END) Feb_Revenue,
SUM(CASE `month` WHEN 'Mar' THEN revenue END) Mar_Revenue,
SUM(CASE `month` WHEN 'Apr' THEN revenue END) Apr_Revenue,
SUM(CASE `month` WHEN 'May' THEN revenue END) May_Revenue,
SUM(CASE `month` WHEN 'Jun' THEN revenue END) Jun_Revenue,
SUM(CASE `month` WHEN 'Jul' THEN revenue END) Jul_Revenue,
SUM(CASE `month` WHEN 'Aug' THEN revenue END) Aug_Revenue,
SUM(CASE `month` WHEN 'Sep' THEN revenue END) Sep_Revenue,
SUM(CASE `month` WHEN 'Oct' THEN revenue END) Oct_Revenue,
SUM(CASE `month` WHEN 'Nov' THEN revenue END) Nov_Revenue,
SUM(CASE `month` WHEN 'Dec' THEN revenue END) Dec_Revenue
FROM Department
GROUP BY id;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41541562/article/details/106614032