Leetcode584. 寻找用户推荐人

本文介绍了一种从客户表中筛选出除指定推荐人外的客户列表的方法,并解释了如何正确处理NULL值以避免遗漏数据。

Every day a leetcode

题目来源:584. 寻找用户推荐人

题目描述

给定表 customer ,里面保存了所有客户信息和他们的推荐人。

写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都 不是 2。

代码:

# Write your MySQL query statement below
SELECT name FROM customer
WHERE referee_id!=2

结果:
在这里插入图片描述

这个查询只会返回一个结果:Zach,所有没有推荐人(referee_id 字段值为 NULL) 的全部都消失了。为什么?

MySQL 使用三值逻辑 —— TRUE, FALSE 和 UNKNOWN。任何与 NULL 值进行的比较都会与第三种值 UNKNOWN 做比较。这个“任何值”包括 NULL 本身!这就是为什么 MySQL 提供 IS NULL 和 IS NOT NULL 两种操作来对 NULL 特殊判断。

因此,在 WHERE 语句中我们需要做一个额外的条件判断 `referee_id IS NULL’。

代码:

# Write your MySQL query statement below
SELECT name FROM customer
WHERE referee_id IS NULL OR referee_id!=2;

结果:
在这里插入图片描述

LeetCode584 题中,目标是从用户数据中筛选出那些推荐人(`referee_id`)不是编号 2 的用户[^1]。这可以通过 Pandas 来实现,具体步骤包括读取数据、过滤符合条件的行,并输出指定的字段。 以下是一个基于 Pandas 的实现方法: ```python import pandas as pd def find_customers(customer: pd.DataFrame) -> pd.DataFrame: # 过滤掉 referee_id 等于 2 的记录 result = customer[customer['referee_id'] != 2] # 返回所需的字段 return result[['name', 'mail']] ``` ### 说明 - `customer[customer['referee_id'] != 2]`:这一行代码用于筛选出 `referee_id` 不等于 2 的行。 - `return result[['name', 'mail']]`:返回最终需要的字段 `name` 和 `mail`。 如果输入数据中包含 `referee_id` 为 `NaN`(空值)的情况,也可以选择保留这些记录,因为它们并不等于 2。Pandas 会自动处理这些情况。 ### 测试示例 假设输入的 `customer` DataFrame 如下所示: ```python data = { 'user_id': [1, 2, 3, 4], 'name': ['Winston', 'Jonathan', 'Annabelle', 'Sally'], 'mail': ['winston@leetcode.com', 'jonathan@leetcode.com', 'bella-@leetcode.com', 'sally.come@leetcode.com'], 'referee_id': [1, None, 3, 2] } customer = pd.DataFrame(data) ``` 运行上述函数后,预期输出结果如下: ``` name mail 0 Winston winston@leetcode.com 1 Jonathan jonathan@leetcode.com 2 Annabelle bella-@leetcode.com ``` ### 扩展功能 如果需要进一步筛选其他条件,例如 `referee_id` 为空的情况,可以扩展条件: ```python result = customer[(customer['referee_id'] != 2) | customer['referee_id'].isna()] ``` 这将包括 `referee_id` 不等于 2 或为空的记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值