Leetcode 3103. 查找热门话题标签 II
1.题目基本信息
1.1.题目描述
表:Tweets
±------------±--------+
| Column Name | Type |
±------------±--------+
| user_id | int |
| tweet_id | int |
| tweet_date | date |
| tweet | varchar |
±------------±--------+
tweet_id 是这张表的主键 (值互不相同的列)。
这张表的每一行都包含 user_id, tweet_id, tweet_date 和 tweet。
题目保证所有 tweet_date 都是 2024 年 2 月的合法日期。
编写一个解决方案来找到 2024 年 二月 的 前 3 热门话题 标签。一条推文可能含有 多个标签。
返回结果表,根据标签的数量和名称 降序 排序。
1.2.题目地址
https://leetcode.cn/problems/find-trending-hashtags-ii/description/
2.解题方法
2.1.解题思路
递归
2.2.解题步骤
第一步,递归的从tweet中提取标签
1.1.获取推特中的第一个标签(递归初始化)
1.2.递归主体
第二步,统计各个标签的id数量,并取前三个
3.解题代码
sql代码
# Write your MySQL query statement below
# 知识点:SUBSTRING_INDEX(field,sep,count),如果count为正,返回field字符串中从左侧数起第count个sep分隔符前面的字符子串,如果count为负,返回field字符串中从右侧数起第-count个sep分隔符后面的字符子串。TRIM([LEADING|TRAILING] str1 FROM field),从field串的前面或者后面删除str1字符串
# 第一步,递归的从tweet中提取标签
WITH RECURSIVE t1 AS (# 1.1.获取推特中的第一个标签(递归初始化)SELECT tweet_id, SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(tweet, '#', 2), '#', -1), ' ', 1) as tag, TRIM(LEADING SUBSTRING_INDEX(tweet, '#', 2) FROM tweet) AS remain_tagsFROM TweetsWHERE tweet LIKE '%#%' AND YEAR(tweet_date) = 2024 AND MONTH(tweet_date) = 2UNION ALL# 1.2.递归主体SELECT tweet_id, SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(remain_tags, '#', 2), '#', -1), ' ', 1) as tag, TRIM(LEADING SUBSTRING_INDEX(remain_tags, '#', 2) FROM remain_tags) AS remain_tagsFROM t1WHERE remain_tags LIKE '%#%'
)# 第二步,统计各个标签的id数量,并取前三个
SELECT CONCAT('#', tag) AS hashtag, COUNT(tweet_id) AS count
FROM t1
GROUP BY tag
ORDER BY count DESC, tag DESC
LIMIT 3