SQL Server中union all的妙用

请添加图片描述

事情的经过

在这里插入图片描述
力扣传送门

题解

这个题目的意思还是很简单的,就是问两列里面谁出现的次数最多,出现了多少次

我的解
/* 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会去重,这个可以复习一下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值