暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MYSQL之牛客网实战笔试题(二)

奈奈八尾 2021-04-19
559

牛客网的实战题总共分为四个难度等级,其中简单18道,中等30道,较难16道,困难7道。


这次更新的是简单题8道,以题目+考核知识点+解题代码的内容输出,有些题目可能需要考虑多种情况来解,而且解法也不是唯一的,可以自己多多想想有没有其他的解法或者想想那种解法效率最好。


以下题目编号以牛客网编号为准,方便大家查询。


#2.查询employees中员工入职时间排名倒数第三的员工

考点:order by,limit,limit n offset m,max

#数据唯一性

解法一:

SELECT emp_no,hire_date

FROM employees

ORDER BY hire_date DESC

LIMIT 2,1

解法二:

SELECT emp_no,hire_date

FROM employees

ORDER BY  hire_date DESC

LIMIT 1 OFFSET 2;


#数据存在重复值

SELECT emp_no,hire_date

FROM  employees

WHERE hire_date =(SELECT hire_date

                  FROM employees

                  ORDER BY hire_date DESC

                  LIMIT 2,1)


#4.查找所有已分配部门员工的last_name 、first_name、dept_no

考点:join

SELECT  e.last_name,

        e.first_name,

        d.dept_no

FROM employees e

INNER JOIN dept_emp  d ON e.emp_no=d.emp_no


#7.查找薪水变动超过15次的员工号emp_no以及其对应的变动次数t

考点:group by,having,延伸count(*),count(列名)的区别


SELECT emp_no,

       count(*) as t

FROM salaries

GROUP BY emp_no

HAVING t>15


#8.找出所有员工具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示

考点:distinct

SELECT DISTINCT(salary)

FROM salaries

ORDER BY salary DESC;


#10.找出所有非部门领导的员工emp_no

考点:join,not in

SELECT emp_no

FROM employees

WHERE emp_no not in (SELECT emp_no FROM dept_manager);

SELECT e.emp_no

FROM employees e

LEFT JOIN dept_manager d ON e.emp_no=d.emp_no

WHERE d.dept_no is null;


#15.查找employees表所有emp_no为奇数,且last_name不为Mary的员工信息,并按照hire_date逆序排列

考点:奇数

SELECT *

FROM employees

WHERE  last_name!="Mary" AND emp_no%2=1

ORDER BY hire_date DESC;


#17.获取薪水第二多的员工的emp_no以及其对应的薪水salary

考点:数据是否唯一,order by ,limit n offset m,dense_rank,max的使用方法

#数据唯一

SELECT emp_no,salary

FROM salaries

ORDER BY salary DESC

LIMIT 1,1;

#数据重复

解法一:

SELECT emp_no,salary

FROM (SELECT emp_no,

             salary,

             dense_rank() OVER (ORDER BY salary DESC) AS rk 

       FROM salaries) salaries_1

where rk=2

解法二:

SELECT emp_no,

       salary

FROM salaries

WHERE salary = (SELECT MAX(salary)

               FROM salaries

               WHERE salary !=(SELECT max(salary) 

                               FROM salaries));


#32.将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分

考点:concat,了解拆分substring_index

SELECT CONCAT(last_name,' ',first_name)

FROM employees;


文章转载自奈奈八尾,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论