LeetCode_SQL 练习

SQL 练习


176. 第二高的薪水

查询并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null(Pandas 则返回 None) 。

sql 复制代码
# Write your MySQL query statement below
SELECT MAX(salary) AS SecondHighestSalary
FROM Employee
WHERE salary < (
  SELECT MAX(salary)
  FROM Employee
)

177. 第N高的薪水

查询 Employee 表中第 n 高的工资。如果没有第 n 个最高工资,查询结果应该为 null 。

sql 复制代码
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    DECLARE M INT;
    SET M = N - 1;
    
    RETURN (
        SELECT IFNULL(
            (SELECT DISTINCT Salary
             FROM Employee
             ORDER BY Salary DESC
             LIMIT 1 OFFSET M),
            NULL
        )
    );
END

178. 分数排名

查询并对分数进行排序。排名按以下规则计算:

分数应按从高到低排列。

如果两个分数相等,那么两个分数的排名应该相同。

在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。

按 score 降序返回结果表。

sql 复制代码
SELECT
    score,
    (SELECT COUNT(DISTINCT score) FROM Scores s2 WHERE s2.score >= s1.score) AS 'rank'
    # 设置条件,只选择分数大于或等于外部查询的当前分数的行(即具有相同或更高分数的行)。
FROM
    Scores s1
ORDER BY
    score DESC;

180. 连续出现的数字

找出所有至少连续出现三次的数字。

返回的结果表中的数据可以按 任意顺序 排列。

sql 复制代码
SELECT DISTINCT
    l1.Num AS ConsecutiveNums
FROM
    Logs l1,
    Logs l2,
    Logs l3
WHERE
    l1.Id = l2.Id - 1
    AND l2.Id = l3.Id - 1
    AND l1.Num = l2.Num
    AND l2.Num = l3.Num
;

181. 超过经理收入的员工

id 是该表的主键(具有唯一值的列)。

该表的每一行都表示雇员的ID、姓名、工资和经理的ID。

编写解决方案,找出收入比经理高的员工。

以 任意顺序 返回结果表。

sql 复制代码
# Write your MySQL query statement below
SELECT
	e.name AS Employee
FROM
	Employee e
JOIN
	Employee m
ON
	e.managerId = m.id
AND
	e.salary > m.salary;

182. 查找重复的电子邮箱

id 是该表的主键(具有唯一值的列)。

此表的每一行都包含一封电子邮件。电子邮件不包含大写字母。

编写解决方案来报告所有重复的电子邮件。 请注意,可以保证电子邮件字段不为 NULL。

java 复制代码
# Write your MySQL query statement below
SELECT 
	email AS Email
FROM 
	Person
GROUP BY 
	email
HAVING
	COUNT(email) > 1;

183. 从不订购的客户

Customers 表:

复制代码
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
+-------------+---------+
在 SQL 中,id 是该表的主键。
该表的每一行都表示客户的 ID 和名称。
Orders 表:

+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| customerId  | int  |
+-------------+------+
在 SQL 中,id 是该表的主键。
customerId 是 Customers 表中 ID 的外键( Pandas 中的连接键)。
该表的每一行都表示订单的 ID 和订购该订单的客户的 ID。

找出所有从不点任何东西的顾客。

sql 复制代码
SELECT
    c.name AS Customers
FROM
    Customers c
LEFT JOIN
    Orders o
ON
    c.id = o.customerId
WHERE
    o.id IS NULL;

184. 部门工资最高的员工

复制代码
表: Employee
+--------------+---------+
| 列名          | 类型    |
+--------------+---------+
| id           | int     |
| name         | varchar |
| salary       | int     |
| departmentId | int     |
+--------------+---------+
在 SQL 中,id是此表的主键。
departmentId 是 Department 表中 id 的外键(在 Pandas 中称为 join key)。
此表的每一行都表示员工的 id、姓名和工资。它还包含他们所在部门的 id。
 

表: Department
+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| id          | int     |
| name        | varchar |
+-------------+---------+
在 SQL 中,id 是此表的主键列。
此表的每一行都表示一个部门的 id 及其名称。

查找出每个部门中薪资最高的员工。

sql 复制代码
SELECT d.name AS Department, e.name AS Employee, e.salary AS Salary
FROM Employee e
JOIN Department d ON e.departmentId = d.id
WHERE (e.departmentId, e.salary) IN (
    SELECT departmentId, MAX(salary)
    FROM Employee
    GROUP BY departmentId
)
相关推荐
Dream it possible!10 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊10 小时前
算法之双指针系列(一)
算法·leetcode
十二10 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
小此方11 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划
Pniubi12 小时前
力扣560.和为k的子数组
算法·leetcode·职场和发展
D e re k ZH12 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
Pniubi13 小时前
力扣438.找到字符串中所有字母异位词
算法·leetcode·职场和发展
骑着蜗牛撵大象32713 小时前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
android·数据库·sql·mysql·优化器·执行计划
東隅已逝,桑榆非晚15 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
Eyfcom15 小时前
〖物联网终端实战 01〗UWB 室内高精度定位:仓储 AGV 与人员的厘米级轨迹追踪
物联网·算法·物流系统·快递系统·跨境物流快递系统·物联网终端实战