• freshswq
    2021-05-12
    之前@June第二题和第五题都可以使用mysql8 新功能窗口函数,试了一下,比较好理解。 相关SQL代码如下(含建表SQL) 第二题: 建表和数据SQL: drop table if exists test1; create table test1 (Id int primary key, Name varchar(20), Score decimal(4,2) ); insert into test1 values(1,'张三',80); insert into test1 values(2,'李四',90); insert into test1 values(3,'王五',76); insert into test1 values(4,'赵六',88); insert into test1 values(5,'孙七',67); 查询SQL: select * from ( SELECT * FROM ( SELECT rank() over ( ORDER BY Score DESC ) AS row_num, Id, NAME, Score FROM test1 ) t WHERE row_num =3 第五题: drop table if exists student; create table student ( Id int primary key, Stdname varchar(20), Points decimal(4,2), Classid tinyint ) insert into student values(1,'张三',85,1); insert into student values(2,'李四',80,2); insert into student values(3,'王五',65,2); insert into student values(4,'赵六',90,1); insert into student values(5,'孙七',69,1); insert into student values(6,'周八',85,1); insert into student values(7,'郑九',70,1); drop table if exists class; create table class ( Id int primary key, Classname varchar(20) ) insert into class values(1,'创新班'); insert into class values(2,'普通班'); 查询SQL: SELECT Classname, Stdname, Points FROM ( SELECT dense_rank() over ( PARTITION BY Classname ORDER BY Points DESC ) AS row_num, Classname, Stdname, Points FROM student a JOIN class b WHERE a.Classid = b.Id ) t WHERE row_num <= 3
    展开

    作者回复: 好

    
    8
  • 哈喽
    2021-07-08
    第五题好难理解啊 看了好几遍也没懂 😭

    作者回复: 大厂的面试题一般不会特别直白,多练习,慢慢会有感觉的

    
    2
  • lesserror
    2021-04-08
    偶尔做做SQL题目,和做算法题目一样,都可以预防脑袋生锈。 这一讲中,第五题是一道好题,想了一会儿才想明白。要是面试让我写,不一定能写出来,可能面试官直接会看第五题的结果来筛选候选人。 最近在忙着弄docker搭建新公司的环境问题,弄的头大。还是抽空跟上专栏的脚步!

    作者回复: 多练习,熟悉就好了

    
    1
  • giteebravo
    2021-04-08
    第二题中,排序,限定返回的记录,取其中分数最小的那一条,偏偏就没想到直接用 limit 就解决问题了。 第四题,思路跟老师一致,但在通过分组统计出学生对应的老师编号后,就卡住了,不知道利用自连接就可以直接获取老师的姓名。 在第五题,我想到了先创建一个临时表用来保存最终的查询结果,然后关联查询两张表,分别把不同班的学生成绩插入到这个临时表中,但如何取每个班的前三名,这是个问题。 然后再回头看看题目要求,只写一个 SQL 查询语句,这也太难了…

    作者回复: 这些都是大厂的实际面试题。多练习,可以开阔思路。

    
    1
  • 右耳朵猫咪
    2021-04-08
    第三题貌似有问题,不应该根据两个表的主键关联,应该在地址表创建一个人员表的外键,这个外键与人员表的主键关联才对。

    作者回复: 在MySQL中,主键同时也可以是外键的,只要定义好那个是主表就可以了,你可以试一下。

    共 2 条评论
    1
  • 李康健
    2022-06-18 来自北京
    第三题设计不严谨,无法判断两表之间的关联字段

    作者回复: 欢迎您提出具体的改进意见,可以进一步探讨

    
    
  • Geek_3254e0
    2022-04-27 来自北京
    第四题 可以用in很好写 SELECT id,teach.Fname from teach where id in (select Teacherid from teach GROUP BY Teacherid HAVING COUNT(Teacherid)> 2);

    作者回复: 是的

    
    
  • zhuyuping
    2022-04-22 来自北京
    第4题,这样写好像也可以?也是采用自连接 select t1.id, t1.fname from demo.teach t1 left join demo.teach t2 on (t1.id = t2.teacherid) group by t1.id having count(t1.id) >=2;

    作者回复: 是的

    
    
  • 沈康
    2021-05-22
    第五题好难呀,这个很难想到。原来还可以输入X套公式的,还可以使用窗口函数,6啊

    作者回复: 多做题,可以开阔思路

    
    
  • Jun
    2021-05-05
    老师,请问能否提供创建这些面试题里面的表的代码?

    作者回复: 可以根据图表自己练习写一下代码。

    
    