comments | difficulty | edit_url | tags | |
---|---|---|---|---|
true |
简单 |
|
表:Tweets
+----------------+---------+ | Column Name | Type | +----------------+---------+ | tweet_id | int | | content | varchar | +----------------+---------+ tweet_id 是这个表的主键(有不同值的列)。 这个表包含某社交媒体 App 中所有的推文。
编写一个解决方案来找到 无效的推文。如果一条推文满足下面 任一 条件会被认为无效:
- 长度超过
140
个字符。 - 有超过
3
次提及。 - 有超过
3
个标签。
以 tweet_id
升序 返回结果表。
查询结果格式如下所示:
示例:
输入:
Tweets 表:
+----------+-----------------------------------------------------------------------------------+ | tweet_id | content | +----------+-----------------------------------------------------------------------------------+ | 1 | Traveling, exploring, and living my best life @JaneSmith @SaraJohnson @LisaTaylor | | | @MikeBrown #Foodie #Fitness #Learning | | 2 | Just had the best dinner with friends! #Foodie #Friends #Fun | | 4 | Working hard on my new project #Work #Goals #Productivity #Fun | +----------+-----------------------------------------------------------------------------------+
输出:
+----------+ | tweet_id | +----------+ | 1 | | 4 | +----------+
解释:
- tweet_id 1 包含 4 次提及。
- tweet_id 4 包含 4 个标签。
我们可以使用 LENGTH()
函数计算字符串的长度,计算排除掉 @
或 #
之后的长度,然后使用 OR
运算符连接这三个条件,筛选出对应的 tweet_id,并按照 tweet_id 升序排序。
# Write your MySQL query statement below
SELECT tweet_id
FROM Tweets
WHERE
LENGTH(content) > 140
OR (LENGTH(content) - LENGTH(REPLACE(content, '@', ''))) > 3
OR (LENGTH(content) - LENGTH(REPLACE(content, '#', ''))) > 3
ORDER BY 1;
import pandas as pd
def find_invalid_tweets(tweets: pd.DataFrame) -> pd.DataFrame:
invalid_tweets = tweets[
(tweets["content"].str.len() > 140)
| (tweets["content"].str.count("@") > 3)
| (tweets["content"].str.count("#") > 3)
].sort_values(by="tweet_id")
return invalid_tweets[["tweet_id"]]