SQL练习:2(简单)+1(中等),常规题(group by\order by\avg...)

简介: SQL练习:2(简单)+1(中等),常规题(group by\order by\avg...)

简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。

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

image.png

我的思路: 这个从题目标题无法看出需求,需要具体看描述:查找employees表所有emp_no为奇数,且last_name不为Mary的员工信息,并按照hire_date逆序排列。直接按照需求写sql即可,这里判断员工编号是否为奇数,可以使用%对2取余数进行判断,余数为1即为奇数。

我的题解:

select *
from employees
where emp_no % 2 = 1
and last_name != 'Mary'
order by hire_date desc 
;

涉及知识点:

  • 完整sql执行顺序(每天看一遍,不信记不住):
from -> where -> group by -> having -> select -> order by -> limit
  • sql 取余数可以直接使用 %
  • order by hire_date desc 按hire_date列降序排序

提交结果:

image.png其他题解:

select *
from employees
where emp_no&1 = 1
and last_name != 'Mary'
order by hire_date desc 
;

这里判断是否为奇数,也可以使用位运算进行判断,任何数和1的位运算结果如果是1,则是奇数,否则运算结果为0,则为偶数。

这个是真的涨见识了,位运算很好的应用实践。

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

image.pngimage.png

我的思路: 比较常规,首先明确需求:结果给出title以及平均工资avg,并且以avg升序排序,所以先将titles和salaries进行join连接,然后根据title进行分组求salary的平均值即可,最后按照平均值进行升序排序。

我的题解:

select title, avg(salary) as avg_s
from (
select a.emp_no, a.title, b.salary
from titles as a
join salaries as b
on a.emp_no = b.emp_no
and a.to_date = b.to_date
and a.to_date = '9999-01-01') as c 
group by title
order by avg_s
;

涉及知识点:

  • 完整sql执行顺序(每天看一遍,不信记不住):
from -> where -> group by -> having -> select -> order by -> limit
  • 窗口函数:avg使用
  • group by 分组
  • order by 排序,默认是升序

提交结果:

image.png

SQL17 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

image.png

我的思路: 这个只有一个表,蛮简单的,直接按照salary降序排序,取出第二列数据即可。

我的题解:

select emp_no, salary
from salaries
where to_date = '9999-01-01'
order by salary desc
limit 1,1
;

涉及知识点:

  • 完整sql执行顺序(每天看一遍,不信记不住):
from -> where -> group by -> having -> select -> order by -> limit
  • order by salary desc 降序排序
  • 从指定位置开始取出指定行:limit m,n 从m+1行开始,取出n行数据

提交结果:

image.png

其他题解:上面解法有局限性,如果排名第一的有很多个,那么取出来的还是薪水最高的,所以好的方法应该是直接按第二的薪水进行筛选。

所以我们先找出第二薪水是多少,然后筛选出薪水等于第二薪水的行即可。

select emp_no, salary
from salaries
where to_date = '9999-01-01'
and salary = (
    select salary
    from salaries
    group by salary
    order by salary desc 
    limit 1,1
)
order by salary desc
;

题目地址:https://www.nowcoder.com/ta/sql

相关文章
|
20天前
|
SQL 关系型数据库 MySQL
SQL中,可以使用 `ORDER BY` 子句来实现排序功能
【10月更文挑战第26天】SQL中,可以使用 `ORDER BY` 子句来实现排序功能
50 6
|
3月前
|
SQL 安全 流计算
Flink SQL 在快手实践问题之Group Window Aggregate 中的数据倾斜问题如何解决
Flink SQL 在快手实践问题之Group Window Aggregate 中的数据倾斜问题如何解决
78 1
|
4月前
|
SQL 数据库
SQL ORDER BY 关键字
【7月更文挑战第11天】SQL ORDER BY 关键字。
40 2
|
5月前
|
SQL 数据库
SQL AVG() 函数
SQL AVG() 函数
40 2
|
5月前
|
SQL 存储 数据库
技术好文:SQL查询语句基本练习
技术好文:SQL查询语句基本练习
|
5月前
|
SQL 数据库
SQL GROUP BY 语句
SQL GROUP BY 语句
33 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——SQL优化(2/3)-order by 优化、group by 优化
MySQL数据库——SQL优化(2/3)-order by 优化、group by 优化
55 0
|
6月前
|
SQL 数据库
SQL ORDER BY 关键字
SQL ORDER BY 关键字
36 0
|
6月前
|
SQL
SQL语句两个字段或多个字段同时order by 排序
SQL语句两个字段或多个字段同时order by 排序
1040 0
|
6月前
|
SQL 存储 Oracle
SQL,Group By 真扎心,原来是这样
SQL,Group By 真扎心,原来是这样
66 0