SQL刷题,多表连接(hackerrank-sql-Placements)

题目

终于刷到54/58题了,胜利在望,今天状态还不错,一下写出来了,貌似还比大神的简洁一些,窃喜。话不多说,直接上题。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

鄙人的解法

按照题目中的提示先把大的表格查询出来,再比较和过滤,比较简单。

select t2.Name 
from
(select t1.*, P1.Salary as FS
from
(select S.ID, S.Name, P.Salary, F.Friend_ID as FID
from Students S, Friends F, Packages P
where S.ID=P.ID
and S.ID=F.ID) t1, Packages P1
where t1.FID=P1.ID) t2
where t2.Salary<t2.FS
order by t2.FS;

大神的解法

大神习惯用join,还用了一个with as,我之前一直以为hackerrank用不了这个语句,原来是可以的。

WITH student_salary AS(
    SELECT s.*, p.salary
    FROM students s
    JOIN packages p ON s.id = p.id   
    ),
     friend_salary AS(
     SELECT f.*, p.salary
     FROM friends f
     JOIN packages p ON f.friend_id = p.id)
SELECT s.name
FROM student_salary s
JOIN friend_salary f ON s.id = f.id
WHERE s.salary < f.salary
ORDER BY f.salary

结果

这道题竟然值40分,哈哈哈,有点开心。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值