快乐SQL做题 - Day7

感觉时间好像过得很慢,觉得自己做了好久的题目呀,但今天居然才第七天!不过~坚持真的会很有成就感的!有点想喝茶颜悦色了,也想出去玩,想再江边散步,看夕阳西下。

结束碎碎念,一起来看看今天有什么题目吧~

闯关开始!

关卡1 - 好友申请 II :谁有最多的好友

思路:

由于好友是双向的,所以如果一个人接受了另一个人的请求,他们两个都会多拥有一个朋友。

因为是交叉记录的,所以要建一个子表将requester_id,accepter_id换位置,续在原表后面,用union函数

所以,我们将 requester_id 和 accepter_id 联合起来,然后统计每个人出现的次数。

这里我们应该使用 union all 而不是 union ,因为 union all 即使遇到重复的记录也都会保存下来。

我们的思路是,在一个联合的表格里,我们去group by id,然后统计次数。

select requester_id as id, count(requester_id) as num from

(

    (select requester_id from request_accepted)

    union all

    (select accepter_id from request_accepted)

) as newtable

group by requester_id

order by num desc

limit 1

恭喜过关!进入下一关!


关卡2 - 连续空余座位

思路:

这道题显而易见我们需要创建连接表,我一开始连了三张表,但发现下面这种方法更加简便,就是abs(b-a)=1,然后,连接之后,我们要让a 和 b 都是等于1的.

当3,4,5的时候,4和3,4和5同时满足这三个条件,所以4会返回两回。所以我们还要在一开始加distinct

select distinct a.seat_id from cinema a, cinema b

where abs(b.seat_id - a.seat_id) = 1

and a.free = 1

and b.free = 1

order by a.seat_id asc

恭喜过关!进入下一关!


关卡3 - 销售员

思路:

一开始想的是三表连接,但是用in关键字更容易理解。

我们让sales_id not in 剩下两个连接好的表,然后限制条件为name like 'RED'

就可以啦!是不是特别容易理解~

select s.name from salesperson s 

where s.sales_id not in(

    select sales_id from orders o

    left join company c

    on o.com_id = c.com_id

    where c.name like 'RED'

)

恭喜过关!进入下一关!


关卡4 - 树节点

思路:

我们可以按照下面的定义,求出每一条记录的节点类型。

Root: 没有父节点

Inner: 它是某些节点的父节点,且有非空的父节点

Leaf: 除了上述两种情况以外的节点

所以我们可以用case when来写这道题

case when的语法是:

语法1:

语法2:


所以这道题就是:

select id, 

case when t.p_id is null then 'Root'

         when t.id in (select p_id from tree) then 'Inner'

          else 'Leaf'

          end as type

from tree t

恭喜过关!进入下一关!


关卡5 - 判断三角形

思路:

三角形任意两边之和大于第三边,任意两边之差小于第三边。

所以我们正好复习上面说的case when,来实现上述条件。

select x, y, z,(case

when x + y > z and x + z > y and z + y > x then 'Yes'

else 'No' 

end) as triangle

from triangle

恭喜过关!


今天学到的新知识: union all 即使遇到重复的记录也都会保存下来;要判断连续三个的情况可以用abs(b-a)=1;三表连接也可以用一个表not in/in 另外两个表的链接来做;case when是在select语句里的判断语句,最后记得加end。

明天继续闯关~yay ~                                                                                                                                                                                                           

你可能感兴趣的:(快乐SQL做题 - Day7)