【MySQL】LeeCode高频SQL50题基础版刷题记录(持续更新)
1.可回收且低脂的产品(条件查询)
题目描述
表:Products
Column Name | Type |
---|---|
product_id | int |
low_fats | enum |
recyclable | enum |
product_id 是该表的主键(具有唯一值的列)。
low_fats 是枚举类型,取值为以下两种 (‘Y’, ‘N’),其中 ‘Y’ 表示该产品是低脂产品,‘N’ 表示不是低脂产品。
recyclable 是枚举类型,取值为以下两种 (‘Y’, ‘N’),其中 ‘Y’ 表示该产品可回收,而 ‘N’ 表示不可回收。
编写解决方案找出既是低脂又是可回收的产品编号。
返回结果 无顺序要求 。
返回结果格式如下例所示:
示例 1:
输入:
Products 表:
product_id | low_fats | recyclable |
---|---|---|
0 | Y | N |
1 | Y | Y |
2 | N | Y |
3 | Y | Y |
4 | N | N |
输出:
product_id |
---|
1 |
3 |
解释:
只有产品 id 为 1 和 3 的产品,既是低脂又是可回收的产品。
求解
1. MySQL
SELECT PRODUCT_ID
FROM PRODUCTS
WHERE LOW_FATS="Y" AND RECYCLABLE="Y"
输出得到:
PRODUCT_ID |
---|
1 |
3 |
【涉及语法】基础多条件查询,学习指路–>【MySQL】SQL基础语法+运行原理
2.Python
import pandas as pddef find_products(products):df = products[(products['low_fats'] == 'Y') & (products['recyclable'] == 'Y')]df = df[['product_id']]return df
输出得到:
PRODUCT_ID |
---|
1 |
3 |
2.寻找用户推荐人(条件查询)
题目描述
表: Customer
Column Name | Type |
---|---|
id | int |
name | varchar |
referee_id | int |
在 SQL 中,id 是该表的主键列。
该表的每一行表示一个客户的 id、姓名以及推荐他们的客户的 id。
找出那些 没有被 id = 2 的客户 推荐 的客户的姓名。
以 任意顺序 返回结果表。
结果格式如下所示。
示例 1:
输入:
Customer 表:
id | name | referee_id |
---|---|---|
1 | Will | null |
2 | Jane | null |
3 | Alex | 2 |
4 | Bill | null |
5 | Zack | 1 |
6 | Mark | 2 |
输出:
name |
---|
Will |
Jane |
Bill |
Zack |
求解
1. MySQL
SELECT name
FROM Customer
WHERE referee_id != 2 OR referee_id IS NULL
输出得到:
name |
---|
Will |
Jane |
Bill |
Zack |
【涉及语法】基础多条件查询,学习指路–>【MySQL】SQL基础语法+运行原理
2.Python
import pandas as pddef find_customer_referee(customer: pd.DataFrame) -> pd.DataFrame:df = customer[(customer['referee_id'] != 2) | (customer['referee_id'].isnull())]df = df[['name']]return df
输出得到:
name |
---|
Will |
Jane |
Bill |
Zack |
3.找出 大国 的国家名称、人口和面积(条件查询)
题目描述
World 表:
Column Name | Type |
---|---|
name | varchar |
continent | varchar |
area | int |
population | int |
gdp | bigint |
name 是该表的主键(具有唯一值的列)。
这张表的每一行提供:国家名称、所属大陆、面积、人口和 GDP 值。
如果一个国家满足下述两个条件之一,则认为该国是 大国 :
面积至少为 300 万平方公里(即,3000000 km2),或者
人口至少为 2500 万(即 25000000)
编写解决方案找出 大国 的国家名称、人口和面积。
按 任意顺序 返回结果表。
返回结果格式如下例所示。
示例:
输入:
World 表:
name | continent | area | population | gdp |
---|---|---|---|---|
Afghanistan | Asia | 652230 | 25500100 | 20343000000 |
Albania | Europe | 28748 | 2831741 | 12960000000 |
Algeria | Africa | 2381741 | 37100000 | 188681000000 |
Andorra | Europe | 468 | 78115 | 3712000000 |
Angola | Africa | 1246700 | 20609294 | 100990000000 |
输出:
name | population | area |
---|---|---|
Afghanistan | 25500100 | 652230 |
Algeria | 37100000 | 2381741 |
求解
1. MySQL
SELECT NAME, POPULATION, AREA
FROM WORLD
WHERE AREA >= 3000000 OR POPULATION >= 25000000
输出得到:
name | population | area |
---|---|---|
Afghanistan | 25500100 | 652230 |
Algeria | 37100000 | 2381741 |
【涉及语法】基础多条件查询,学习指路–>【MySQL】SQL基础语法+运行原理
2.Python
import pandas as pddef big_countries(world: pd.DataFrame) -> pd.DataFrame:df = world[(world['area'] >= 3000000) | (world['population'] >= 25000000)]df = df[['name', 'population', 'area']]return df
输出得到:
name | population | area |
---|---|---|
Afghanistan | 25500100 | 652230 |
Algeria | 37100000 | 2381741 |
4.文章浏览(条件查询/去重/排序)
题目描述
Views 表:
Column Name | Type |
---|---|
article_id | int |
author_id | int |
viewer_id | int |
view_date | date |
此表可能会存在重复行。(换句话说,在 SQL 中这个表没有主键)
此表的每一行都表示某人在某天浏览了某位作者的某篇文章。
请注意,同一人的 author_id 和 viewer_id 是相同的。
请查询出所有浏览过自己文章的作者
结果按照 id 升序排列。
查询结果的格式如下所示:
示例 1:
输入:
Views 表:
article_id | author_id | viewer_id | view_date |
---|---|---|---|
1 | 3 | 5 | 2019-08-01 |
1 | 3 | 6 | 2019-08-02 |
2 | 7 | 7 | 2019-08-01 |
2 | 7 | 6 | 2019-08-02 |
4 | 7 | 1 | 2019-07-22 |
3 | 4 | 4 | 2019-07-21 |
3 | 4 | 4 | 2019-07-21 |
输出:
id |
---|
4 |
7 |
求解
1. MySQL
SELECT DISTINCT AUTHOR_ID AS id
FROM VIEWS
WHERE VIEWER_ID = AUTHOR_ID
ORDER BY id
输出得到:
id |
---|
4 |
7 |
【涉及语法】基础多条件查询,学习指路–>【MySQL】SQL基础语法+运行原理
2.Python
import pandas as pddef article_views(views: pd.DataFrame) -> pd.DataFrame:df = views[views['author_id'] == views['viewer_id']]df.drop_duplicates(subset = ['author_id'], inplace = True)df.sort_values(by=['author_id'], inplace = True)df.rename(columns = {'author_id' : 'id'}, inplace = True)df = df[['id']]return df
输出得到:
id |
---|
4 |
7 |
备注:
在 Pandas 中,inplace=True 是一个常见的参数,用于指示操作是否应该直接修改原始数据,而不是返回一个修改后的副本。
- inplace=True:操作会直接修改调用该方法的对象(例如,DataFrame 或 Series),而不会返回一个新的 DataFrame 或 Series。换句话说,数据会在原地(in place)被修改。
- inplace=False(默认值):操作会返回一个修改后的副本,不会改变原始数据。这是大多数 Pandas 函数的默认行为。