题目
终于刷到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分,哈哈哈,有点开心。