点击关注公众号,SQL干货及时获取
后台回复:1024,获取海量学习资源 往期热文
大家好,我是岳哥。
裁员这事儿,现在已经司空见惯了,正常都是N+1,良心点的2N或者N+X。
昨天在微信群里看到一个网上的截图,大跌眼镜。
一些公司为了实现更低成本裁员,竟然想出这样的损招:带着员工去pc、赌博,甚至酒驾,然后自己举报自己,让警察来抓人。
这样一来,公司就能以员工违法为由,把他们扫地出门,而且连一分钱赔偿都不用出。这招儿,真是绝!
这比找竞争对手「挖人试」裁员更加可恶!
这样的公司,一旦被查出来,那就是声名狼藉,谁还敢去应聘?那些在职的员工肯定也工作的不安心,更加不愿意为这样的公司卖命。
那些被抓的员工,遇到这样的领导,真的是倒了八辈子的霉。不仅工作没了,还可能留下案底,不仅影响自己还可能影响自己家人。
要是让这些被抓的员工知道真相,估计想刀了这领导的心都有。
这种事你还不好举证自己是被诱导的,真的是比窦娥还冤。
只能提醒大家小心一点,不要做任何违法的事,哪怕是被诱导的。
以下是今天的SQL干货
表 T20191113保存了一些点在 X 轴上的坐标,这些坐标都是整数。写一个查询语句,找到这些点中最近两个点之间的距离。
最近距离显然是 '1' ,是点 '-1' 和 '0' 之间的距离。所以输出应该如下:
注意:每个点都与其他点坐标不同,表 T20191113不会有重复坐标出现。
参考答案
create tableT20191113
(
X int
)
insert intoT20191113 values (-1);
insert intoT20191113 values (0);
insert intoT20191113 values (2);
--SQL server写法
select top 1 abs(p1.X-p2.X) as shortest
from T20191113 p1
inner join T20191113 p2
on p1.X<>p2.X
order by shortest
答案解析
根据题意我们要求两点之间的差值的最小值,那就涉及到自连接,题目要求每个点的坐标都不相同,那就是要求坐标点不相等(p1.X<>p2.X),这样剩下的点来求差值再取最小值就是我们要求的结果了。
代码中通过绝对值函数(abs())来保证两点之间的差值不出现负值,而TOP 1 则是经过排序后取的最小的一个,这里同样可以使用聚合函数min来实现。
--MySQL写法
--方法一:
select abs(p1.X-p2.X) as shortest
from T20191113 p1
inner join T20191113 p2
on p1.X<>p2.X
order by shortest
limit 1
--方法二:
select min(abs(p1.X-p2.X)) as shortest
from T20191113 p1
inner join T20191113 p2
on p1.X<>p2.X
答案解析
方法一与SQL Server的解法类似,通过limit来取最小的一个
方法二则通过min函数来取最小的一个,这个不需要排序