字符串操作
编写一个解决方案来找到 2024
年 二月 的 前 3
热门话题 标签。每条推文只包含一个标签。
返回结果表,根据标签的数量和名称 降序 排序。
结果格式如下所示。
代码:
SELECT hashtag, COUNT(*) AS hashtag_count
FROM (
SELECT REGEXP_SUBSTR(tweet, '#[A-Za-z0-9_]+') AS hashtag
FROM Tweets
WHERE date_format(tweet_date,"%Y-%m")='2024-02'
) AS ExtractedHashtags
WHERE hashtag IS NOT NULL
GROUP BY hashtag
ORDER BY hashtag_count DESC, hashtag DESC
LIMIT 3;
Union ALL
最多好友
编写解决方案,找出拥有最多的好友的人和他拥有的好友数目。
生成的测试用例保证拥有最多好友数目的只有 1 个人。
查询结果格式如下例所示。
代码:
select t1.ids as id,count(*) as num
from(
select requester_id as ids from RequestAccepted
union all
select accepter_id as ids from RequestAccepted
) as t1
group by t1.ids
order by num desc
limit 1;
窗口函数
分数排名
编写一个解决方案来查询分数的排名。排名按以下规则计算:
- 分数应按从高到低排列。
- 如果两个分数相等,那么两个分数的排名应该相同。
- 在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。
按 score
降序返回结果表。
查询结果格式如下所示。
示例 1:
输入: Scores 表: +----+-------+ | id | score | +----+-------+ | 1 | 3.50 | | 2 | 3.65 | | 3 | 4.00 | | 4 | 3.85 | | 5 | 4.00 | | 6 | 3.65 | +----+-------+ 输出: +-------+------+ | score | rank | +-------+------+ | 4.00 | 1 | | 4.00 | 1 | | 3.85 | 2 | | 3.65 | 3 | | 3.65 | 3 | | 3.50 | 4 | +-------+------+
思路1: 使用窗口函数
DENSE_RANK函数可以对窗口内的记录进行排名且相同分值的排名一致
代码:
# Write your MySQL query statement below
SELECT
S.score,
DENSE_RANK() OVER (
ORDER BY
S.score DESC
) AS 'rank'
FROM
Scores S;
思路二:
子查询
代码:
SELECT
S1.score,
(
SELECT
COUNT(DISTINCT S2.score)
FROM
Scores S2
WHERE
S2.score >= S1.score
) AS 'rank'
FROM
Scores S1
ORDER BY
S1.score DESC;