LeetCode_SQL练习(二)

196. 删除重复的电子邮箱

表: Person

复制代码
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| email       | varchar |
+-------------+---------+

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

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

sql 复制代码
# Write your MySQL query statement below
DELETE FROM Person
WHERE id NOT IN (
    SELECT min_id
    FROM (
        SELECT MIN(id) AS min_id
        FROM Person
        GROUP BY LOWER(email)
    ) t
)

在 SQL 查询中,子查询可以作为一个临时表来使用。t 是给这个临时表起的别名。
在上述查询中,内部的子查询使用了别名 t 来表示结果集。通过为子查询结果集指定一个别名,我们可以在外部查询中引用该别名来访问子查询的结果。
这样做的好处是,我们可以在外部查询中对子查询的结果进行进一步的处理,例如使用 NOT IN 子句来过滤不在子查询结果中的记录。

1407. 排名靠前的旅行者

表:Users

复制代码
+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| name          | varchar |
+---------------+---------+
id 是该表中具有唯一值的列。
name 是用户名字。

表:Rides

复制代码
+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| user_id       | int     |
| distance      | int     |
+---------------+---------+
id 是该表中具有唯一值的列。
user_id 是本次行程的用户的 id, 而该用户此次行程距离为 distance 。

编写解决方案,报告每个用户的旅行距离。

返回的结果表单,以 travelled_distance 降序排列 ,如果有两个或者更多的用户旅行了相同的距离, 那么再以 name 升序排列 。

sql 复制代码
SELECT Users.name, COALESCE(SUM(Rides.distance), 0) AS travelled_distance
FROM Users
LEFT JOIN Rides ON Users.id = Rides.user_id
GROUP BY Users.id, Users.name
ORDER BY travelled_distance DESC, Users.name ASC;

这条查询语句使用了左连接(LEFT JOIN)将两张表关联起来,并通过 GROUP BY 子句按用户 id 和名称分组。使用 COALESCE 函数将 NULL 值转换为 0,以处理没有行程记录的情况。最后,按 travelled_distance 降序和 name 升序进行排序。

197. 上升的温度

SQL Schema

表: Weather

复制代码
+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| recordDate    | date    |
| temperature   | int     |
+---------------+---------+
在 SQL 中,id 是该表的主键。
该表包含特定日期的温度信息

找出与之前(昨天的)日期相比温度更高的所有日期的 id 。

返回结果 无顺序要求 。

sql 复制代码
# Write your MySQL query statement below
SELECT
    t1.id
FROM
    Weather t1
JOIN
    Weather t2
ON
    t1.recordDate = DATE_ADD(t2.recordDate, INTERVAL 1 DAY)
WHERE
    t1.Temperature > t2.Temperature;

577. 员工奖金

选出所有 bonus < 1000 的员工的 name 及其 bonus。

Employee 表单

复制代码
+-------+--------+-----------+--------+
| empId |  name  | supervisor| salary |
+-------+--------+-----------+--------+
|   1   | John   |  3        | 1000   |
|   2   | Dan    |  3        | 2000   |
|   3   | Brad   |  null     | 4000   |
|   4   | Thomas |  3        | 4000   |
+-------+--------+-----------+--------+
empId 是这张表单的主关键字

Bonus 表单

复制代码
+-------+-------+
| empId | bonus |
+-------+-------+
| 2     | 500   |
| 4     | 2000  |
+-------+-------+
empId 是这张表单的主关键字

输出示例:

复制代码
+-------+-------+
| name  | bonus |
+-------+-------+
| John  | null  |
| Dan   | 500   |
| Brad  | null  |
+-------+-------+
sql 复制代码
# Write your MySQL query statement below
SELECT 
    Employee.name, Bonus.bonus
From
    Employee
LEFT JOIN
    Bonus
ON
    Employee.empId = Bonus.empId
WHERE
    Bonus.bonus < 1000 OR Bonus.bonus IS null;
相关推荐
8Qi816 小时前
LeetCode 75:颜色分类(荷兰国旗问题)—— Java 题解 ✅
java·算法·leetcode·指针·排序
暴躁小师兄数据学院16 小时前
【AI大数据工程师特训笔记】第12讲:表分区与索引
大数据·笔记·sql·postgresql
Litluecat17 小时前
信创迁移:Oracle切换海量数据库,慢sql扫描
数据库·sql·oracle·信创·海量
2601_9611940217 小时前
27考研刘晓艳单词pdf
linux·sql·ubuntu·华为·pdf·.net
(●—●)橘子……19 小时前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
杨云龙UP19 小时前
Oracle Health Check巡检脚本使用SOP V2.0:从HTML原始报告→生成Word专业巡检报告→交付客户_2026-06-03
linux·运维·数据库·sql·oracle·报告·巡检
牛奔1 天前
如何让 GORM 打印 SQL 语句?三种方式全解析
数据库·sql
风筝在晴天搁浅1 天前
快手 CodeTop LeetCode 224.基本计算器
数据结构·算法·leetcode
8Qi81 天前
LeetCode 31:下一个排列(Next Permutation)—— 完整题解笔记 ✅
笔记·算法·leetcode·指针·思维·排列
JdSnE27zv1 天前
数据库性能优化三:程序操作优化
数据库·sql·性能优化