一:题目要求
表: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 个标签。
输出表以 tweet_id 升序排序。
二:MySQL解法
可见题目中有三个条件,只要满足一个条件则判定该数据不成立,所以三个条件之间的关系是“或”
MySQL没有python强大的字符串匹配函数,但是MySQL拥有判断字符长度的函数,像判断某个特定字符出现的次数,可以用 原字符串的总字符数 减去 将特定字符替换为空字符的字符串的字符数 的数量,就是该特定字符的数量了。
LENGTH(原字符) - LENGTH(REPLACE(特定字符,''))
应用到判断语句中就是:
# 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 tweet_id ASC
三:pandas解法
python的解法相对更容易,.str.len()可以判断出字符串的字符数量;.str.count('特定字符')可以直接判断出特定字符的字符数量
import pandas as pddef find_invalid_tweets(tweets: pd.DataFrame) -> pd.DataFrame:A = tweets['content'].str.len() > 140B = tweets['content'].str.count('#') > 3C = tweets['content'].str.count('@') > 3data=tweets[A | B | C]return data[['tweet_id']]