跳转至

3059. 找到所有不同的邮件域名 🔒

题目描述

表:Emails

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| email       | varchar |
+-------------+---------+
id 是这张表的主键(有不同值的列)。
这张表的每一行包含一个电子邮件地址。电子邮件地址不包含大写字母。

编写一个解决方案来找到所有 不同的电子邮件域名 并且计数与每个域名相关联的 记录只考虑.com 结尾 的域名。

返回结果表以 email_domains 升序 排列。

结果格式如下所示。

 

示例 1:

输入: 
Emails 表:
+-----+-----------------------+
| id  | email                 |
+-----+-----------------------+
| 336 | hwkiy@test.edu        |
| 489 | adcmaf@outlook.com    |
| 449 | vrzmwyum@yahoo.com    |
| 95  | tof@test.edu          |
| 320 | jxhbagkpm@example.org |
| 411 | zxcf@outlook.com      |
+----+------------------------+
输出: 
+--------------+-------+
| email_domain | count |
+--------------+-------+
| outlook.com  | 2     |
| yahoo.com    | 1     |  
+--------------+-------+
解释: 
- 以“.com”结束的合法域名只有“outlook.com”和“yahoo.com”,数量分别为 2 和 1。
输出表以 email_domains 升序排列。

解法

方法一:使用 SUBSTRING_INDEX 函数 + 分组统计

我们先筛选出所有以 .com 结尾的邮箱,然后使用 SUBSTRING_INDEX 函数提取出邮箱的域名,最后使用 GROUP BY 统计每个域名的个数。

1
2
3
4
5
6
# Write your MySQL query statement below
SELECT SUBSTRING_INDEX(email, '@', -1) AS email_domain, COUNT(1) AS count
FROM Emails
WHERE email LIKE '%.com'
GROUP BY 1
ORDER BY 1;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import pandas as pd


def find_unique_email_domains(emails: pd.DataFrame) -> pd.DataFrame:
    emails["email_domain"] = emails["email"].str.split("@").str[-1]
    emails = emails[emails["email"].str.contains(".com")]
    return (
        emails.groupby("email_domain")
        .size()
        .reset_index(name="count")
        .sort_values(by="email_domain")
    )

评论