sql题目说明
写一条sql,查找出误删的数据:
货币汇率表,原本6条数据,误删了三条,需要根据剩下的三条数据,查出被误删的货币列表,汇率不需要展示和计算;
初始数据如下,为了方便我将表名取为test
被误删的数据的货币即我们sql的结果应该为:
EUR CAN
$ CAN
$ EUR
总结自己表现不佳的几点:
①重点思考就错了,认为需要一条sql查出来,就理解为需要比较简单高效的方法实现,没有想出来;潜意思认为作为题目考虑效率问题,应该不需要太多子查询,所以我没有做出来,也许会有什么高级语法。
②第一步的from_currency和to_currency进行union这种同表不同字段合并的方法没有想到,原因一是这种方式很少用到,而且会导致比较深的子查询,涉及①里面的思考;原因二担心如果时间花得长了,结果没能实现功能会比较影响面试官印象;
③跟着面试官及自己的思路写出了第一步union的sql了,后面的sql应该非常容易实现了,但是当时不知为何表现确实不好,就是没能写出来,而且后面问答感觉也不太好(前面第一步的合并可能是确实一下子没想到,但是后面组合都是比较简单的sql,没表现好蛮遗憾的)
④总结:最后三轮面试还没结束就想出下面的sql了,所以面试中sql题一般是不需要考虑性能的,主要就是为了考察思路和简单sql的叠加组合使用(最终实现发现其实也不复杂)
ps:放在两三年前我觉我十分钟能写出来,当然这次面试官如果没有在对面等着,我应该也能实现
最终我吃饭时候想出的实现方案及结果集如下:
select a.from_currency, b.from_currency
from
(select from_currency from test
union
select to_currency from test) a
join
(select from_currency from test
union
select to_currency from test) b
on a.from_currency != b.from_currency
where
concat(a.from_currency, b.from_currency) NOT IN
(select concat(test.from_currency, test.to_currency) from test);
结果集如下:
面试中其他需要改进点总结:
.有些问题明明是会的结果没有说出来,主要因为刚开始面试,有些问题没理解到面试官的意图
.关于java中计算相关的知识点没有及时去系统规范的总结,不利于面试,也不利于PAT的考试,这一小的知识点其实收货巨大的
.应该更活跃一点更自信一点,主管和人事三面的时候,想听一下之前的电话面试时简单的英文自我介绍,应该直接重新说一下,没必要婉拒,表现有点内向