事情的经过
题解
这个题目的意思还是很简单的,就是问两列里面谁出现的次数最多,出现了多少次
我的解
/* Write your T-SQL query statement below */
WITH tre AS(
SELECT a.orders FROM RequestAccepted
UNPIVOT(
orders FOR emp IN(accepter_id,requester_id)
)AS a
)
SELECT TOP 1 orders as id,COUNT(orders) as num FROM tre GROUP BY orders ORDER BY COUNT(orders) desc
我的解注解
别人拿力扣练算法,我拿力扣练语法,也是没谁了,哈哈,我因为最近在练UNPIVOT,所以我毫不犹豫把两列合成一列然后去求最多出现的那个,当然咯,题目出的复杂一点的话,可以就还可以出现组合重复算一个,或者出现解除好友等一系列操作,那肯定会麻烦很多
最优解
select top 1 a id, count(b) num from (
select requester_id a, accepter_id b from requestaccepted
union all
select accepter_id, requester_id from requestaccepted) temp group by a order by count(b) desc
最优解注解
利用union all将1张表连接两次,同时两个列也错开连接,形成两个两个列结合的列,意图很明显,union all在连接时是不会去重重复数据的,但是union会去重,这个可以复习一下