2021-07-15 刷题 12、15、16题

2021-07-15  本文已影响0人  Sunny_Liao

SQL12 获取每个部门中当前员工薪水最高的相关信息

SQL 12 题目 SQL 12 题目 SQL 12 题目

这道题暂时没有弄明白,这两天有空就看看,然后补充上


SQL15 查找employees表emp_no与last_name的员工信息


SQL 15 题目 SQL 15 题目

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

题意:每个title下,emp_no重复的员工忽略不计

方法1:使用%

SELECT *

FROM employees

WHERE emp_no % 2 = 1

AND last_name<>'Mary'

ORDER BY hire_date DESC;

补充:emp_no % 2=1也可以改成MOD(emp_no, 2)=1,但是某些sql版本可能不支持后者(比如题库就不支持)

补充:不相等有三种表示方式:<>、!=、IS NOT

注意:last_name是varchar类型,所以对它的判断需要加上单引号

方法2:使用&

SELECT *

FROM employees

WHERE emp_no & 1

AND last_name<>'Mary'

ORDER BY hire_date DESC;

补充:sql中/表示标准除法,如101/2得到50.5,而DIV表示整数除法,如101 DIV 2得到50

补充:奇偶数查询:参考资料:https://blog.csdn.net/ccStroy/article/details/78061861

查询奇数的一般方法:如上(最好是位运算&)

查询偶数的一般方法:emp_no=(emp_no>>1<<1)

但是,以上的一般方法,针对的是字段全是数字的情况,如果对于身份证这种中间隐藏了一部分的,积极无法使用

所以更好的方法是使用正则化表达式(当然题库这里无法使用正则化表达式,可能是版本或设置问题)

查询奇数的正则化方法:emp_no REGEXP ‘[13579]

补充:顺便说一下正则化表达式:

^aa:以aa开头

aa$:以aa结尾

.:匹配任何字符

[abc]:[字符集合],包含中括号内的字符

[^abc]或[!abc]:[字符集合],不包含中括号内的字符

a|b|c:匹配a或b或c,如(中|美)国

:匹配前面的子表达式0次或者多次。如,zo能匹配’z’以及’zoo’。*等价于{0,}

+:匹配前面的子表达式1次或者多次。如,’zo+’能匹配’zo’,但不能匹配’z’。+等价于{1,}

{n}:n是一个非负整数,匹配前面的子表达式2次。如,o{2} 能匹配’food’中的两个o,但不能匹配’Bob’中的o

{n, m}:m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。


SQL16 统计出当前各个title类型对应的员工当前薪水对应的平均工资


SQL 16 题目 SQL 16 题目 SQL 16 题目

解答:

使用:INNER JOIN+GROUP BY

不要忘记时间是    :“当前!!!”

SELECT t.title, AVG(salary) AS avg

FROM titles as t

INNER JOIN salaries as s

ON t.emp_no=s.emp_no

WHERE t.to_date='9999-01-01'

AND s.to_date='9999-01-01'

GROUP BY t.title;

注意:AVG(*)是自动命名为avg的,所以不用重命名

补充:可以在连接表的时候给的条件更多一些

SELECT t.title, AVG(salary)

FROM titles as t

INNER JOIN salaries as s

ON t.emp_no=s.emp_no

AND t.to_date='9999-01-01'

AND s.to_date='9999-01-01'

GROUP BY t.title;

学习目标:正则化,正确的审题!

注意:截至到 2021/07月,牛客网的SQL题实际上仅有80道题而已,如果有跳题的,证明目该题号已缺失,不要纠结,继续往下做即可!

上一篇 下一篇

猜你喜欢

热点阅读