Skip to content

Latest commit

 

History

History
111 lines (83 loc) · 2.89 KB

File metadata and controls

111 lines (83 loc) · 2.89 KB
comments difficulty edit_url tags
true
简单
数据库

English Version

题目描述

表:Emails

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

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

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

结果格式如下所示。

 

示例 1:

输入: 
Emails 表:
+-----+-----------------------+
| id  | email                 |
+-----+-----------------------+
| 336 | [email protected]        |
| 489 | [email protected]    |
| 449 | [email protected]    |
| 95  | [email protected]          |
| 320 | [email protected] |
| 411 | [email protected]      |
+----+------------------------+
输出: 
+--------------+-------+
| 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 统计每个域名的个数。

MySQL

# 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;

Python3

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")
    )