力扣sql中等篇练习(二十)

力扣sql中等篇练习(二十)

1 寻找面试候选人

1.1 题目内容

1.1.1 基本题目信息1

在这里插入图片描述

1.1.2 基本题目信息2

在这里插入图片描述

1.1.3 示例输入输出
a 示例输入

在这里插入图片描述

b 示例输出

在这里插入图片描述

1.2 示例sql语句

# 分为以下两者情况,分别考虑,然后union进行处理(有可能同时满足,需要去进行去重)
# ①该用户在 三场及更多不同的 比赛中赢得 金牌(这些比赛可以不是连续的)分组然后数量大于3即可
#连续三年以及更多,意味着只需要满足三年的情况就行
#使用with创建临时表(查出每年用户是否获奖),inner join后面可以直接接上union
WITH T AS
(
    SELECT u.user_id,c.contest_id
    FROM Contests c
    INNER JOIN Users u
    ON c.gold_medal=u.user_id
    OR c.silver_medal=u.user_id
    OR c.bronze_medal=u.user_id
    ORDER BY u.user_id,c.contest_id
)
SELECT name,mail
FROM Users
WHERE user_id IN
(
    SELECT distinct t1.user_id
    FROM T t1
    INNER JOIN T t2
    ON t1.user_id=t2.user_id AND t1.contest_id+1=t2.contest_id
    INNER JOIN T t3
    ON t2.user_id=t3.user_id AND t2.contest_id+1=t3.contest_id
    UNION
    SELECT gold_medal user_id
    FROM Contests
    GROUP BY gold_medal
    HAVING count(contest_id)>=3
)

1.3 运行截图

在这里插入图片描述

2 每天的最大交易

2.1 题目内容

2.1.1 基本题目信息

在这里插入图片描述

2.1.2 示例输入输出

在这里插入图片描述

2.2 示例sql语句

# Write your MySQL query statement below
SELECT t1.transaction_id
FROM
(
    SELECT transaction_id,date_format(day,'%Y-%m-%d') d,amount
    FROM Transactions 
)t1
INNER JOIN
(
    SELECT t2.d,MAX(t2.amount) n
    FROM
    (
        SELECT transaction_id,date_format(day,'%Y-%m-%d') d,amount
        FROM Transactions 
    )t2
    GROUP BY t2.d
)t3
ON t1.d=t3.d AND t1.amount=t3.n
ORDER BY t1.transaction_id asc

2.3 运行截图

在这里插入图片描述

3 联赛信息统计

3.1 题目内容

3.1.1 基本题目信息1

在这里插入图片描述

3.1.2 基本题目信息2

在这里插入图片描述

3.1.3 示例输入输出

在这里插入图片描述

3.2 示例sql语句

# 注意表中是进球数,不是得分数
# 分别求出客场时得分和主场时得分,两者合并后再分组即可
# 按照字典顺序默认就是升序
SELECT (SELECT team_name FROM Teams WHERE team_id=t1.team_id) team_name,count(*) matches_played,sum(t1.score) points,
       SUM(t1.n1) goal_for,SUM(t1.n2) goal_against,SUM(t1.n1)-SUM(t1.n2) goal_diff
FROM
(
    SELECT home_team_id team_id,IF(home_team_goals>away_team_goals,3,IF(home_team_goals=away_team_goals,1,0)) score,
    home_team_goals n1,away_team_goals n2
    FROM Matches
    UNION ALL
    SELECT away_team_id team_id,IF(home_team_goals<away_team_goals,3,IF(home_team_goals=away_team_goals,1,0)) score,
    away_team_goals n1,home_team_goals n2
    FROM Matches
)t1
GROUP BY t1.team_id
ORDER BY points desc,goal_diff desc,team_name asc

3.3 运行截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值