拼多多二面,最恶心的一次。。

科技   2024-10-15 14:00   广东  
大家好,我是岳哥。

今天看到一个同学吐槽在面试拼多多的时候遇到面试官迟到,并且全程态度很差。

让面试官帮忙纠正解答一下,只是说肯定回答的不对,并没有给解答。

这位同学已经进入到二面说明能力并不差,面试有时候真的是需要运气。
遇到面试官工作太忙,心情不好,很容易就把情绪带到面试中去。不管怎样,就算没有通过面试也可以增加一些面试经验,多多复盘,总能拿到满意的offer。
大家有没有类似的经历,可以在评论区分享一下。

下面分享一道大厂的SQL面试题

题目

有如下ABC三列和几组数据

想得到如下结果

该如何写查询?

解释:结果是对A列进行分组,对B列进行求和,当同一组的C列数据不同时返回1,当同一组的C列数据相同时则返回C列的值即可。例如 aaa组,B列求和为3,C列因为X和Y不相同,则返回为1

参考答案


create table T20191103
(A varchar(20),
 B int,
 C varchar(20)
);

insert into T20191103 values ('aaa',1,'X');
insert into T20191103 values ('aaa',2,'Y');
insert into T20191103 values ('bbb',3,'X');
insert into T20191103 values ('bbb',4,'X');
insert into T20191103 values ('ccc',5,'Y');
insert into T20191103 values ('ccc',6,'Y');

--MySQL 8.0和SQL Server
select a.A,a.B,
case when D=2 then '1' else E end AS C
FROM (
SELECT A,
SUM(B) B,
COUNT(distinct C) as D,
MIN(C) as E from T20191103 group by A) a

答案解析

1、 从题目要求来看,是要求对A列进行分组,对B列进行SUM求和,但是C列并非简单的聚合。

2、 当同一组的C不同时返回1,当同一组的C相同是返回C。而有这种条件判定的通常我们会使用CASE WHEN来进行求解。

3、 但是我们该如何判断C呢?这里的解法比较巧妙,当C不同的时候,我们发现他们去重后的数量是2,C相同时,他们去重后的数量是1,因此我们可以通过C列去重后的数量来判定。

4、 判定完之后,我们最后通过CASE WHEN的子查询即可完成条件转换输出了。

今天的分享就到这里,希望大家能有所收获~


推荐阅读
成为数据分析师
牛逼,ChatGPT新模型 o1 国内直接连!
《SQL145题第2版》正式发布!



你好,我是岳哥,毕业于一所普通二本院校,从一名数据库工程师成长为团队负责人,拥有11年数据行业的工作经验。


曾经,我用3年时间将公众号粉丝做到10w粉丝,微信好友2w+,副业收入超过7位数。


作为一名普通人,我的成长经历更加符合大多数人的情况,三年的时间让我赚到人生的第一桶金。后台回复1024,可领取500G视频资料点击蓝字查看我的成长之路。

SQL数据库开发
专注数据领域,分享SQL,数据分析,Python,Linux ,大数据等技术内容,以及AIGC在数据领域的应用。
 最新文章