SQL练习:轻轻松松,1(中等)+2(较难)

简介: SQL练习:轻轻松松,1(中等)+2(较难)

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

SQL22 统计各个部门的工资记录数

image.pngimage.png

我的思路: 需求搞清楚,就蛮简单了,先将部门员工表和薪水表连接,然后通过部门编号分组,计算数据条数,可以得出每个部门对应的薪水记录数,然后和部门表连起来,即可获取对应的部门名称了。

我的题解:

select a1.dept_no, b1.dept_name, a1.sum
from (
select a.dept_no, count(a.emp_no) as sum
from dept_emp as a
join salaries as b
on a.emp_no = b.emp_no
group by a.dept_no) as a1, departments as b1
where a1.dept_no = b1.dept_no
;

涉及知识点:

  • 完整sql执行顺序(每天看一遍,不信记不住):
from -> where -> group by -> having -> select -> order by -> limit
  • 窗口函数count计算分组内数据条数
  • group by 分组

提交结果:

image.png

SQL23 对所有员工的薪水按照salary降序进行1-N的排名

image.png

我的思路: 这里正好用到之前讲的窗口函数dense_rank。按题目示例我们知道,需要输出的是按薪水降序排序,生成新的一列排序序号,相同薪水排序序号相同,且按照emp_no升序排列。

因为做这题前一天才看了窗口函数相关内容,所以马上想到dense_rank,可以计算排序,相同位次一样,如:

数值:23 23 24 25
排序:1  1  2  3

我的题解:

select emp_no, salary, dense_rank() over(order by salary desc) as t_rank
from salaries
order by t_rank,emp_no;

涉及知识点:

  • 完整sql执行顺序(每天看一遍,不信记不住):
from -> where -> group by -> having -> select -> order by -> limit
  • 窗口函数 dense_rank() over(order by salary desc)
  • 顺便提一下:rank() 会跳位,比如还是上面的例子,排序会变成:1 1 3 4
  • 顺便提一下:row_number() 直接为位置序号,比如还是上面的例子,排序会变成:1 2 3 4

提交结果:

image.png

其他题解:

image.png有点算法的意思了,下回给大家分析下,也欢迎大家评论区说说自己的看法。

SQL24 获取所有非manager员工当前的薪水情况

image.pngimage.pngimage.png

我的思路: 和之前的题目很相像,越往后会发现,给的表越来越多,信息还是一样,需求也一样,这样也更符合数据库范式。这里我直接从dept_emp和salaries中取出所需数据,去除部门经理即可,类似把现在的散表合并成之前的宽表,这里没有用到employees表,根据需求确实不需要。

我的题解:

-- employees 员工信息表
-- dept_emp 部门员工关系表
-- dept_manager 部门经理信息表
-- salaries 员工薪水表
select a.dept_no, a.emp_no, b.salary
from dept_emp as a,salaries as b
where a.emp_no not in (select emp_no from dept_manager)
and a.to_date = '9999-01-01'
and a.emp_no = b.emp_no
;

涉及知识点:

  • 完整sql执行顺序(每天看一遍,不信记不住):
from -> where -> group by -> having -> select -> order by -> limit
  • not in 判断元素是否在集合内

提交结果:

image.png

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

相关文章
|
7月前
|
SQL Perl
PL/SQL经典练习
PL/SQL经典练习
|
7月前
|
SQL 分布式计算 数据挖掘
Hive SQL初级练习(30题)
Hive SQL初级练习(30题)
|
SQL 存储 Java
Mybatis实战练习四【单个条件(动态SQL)&添加数据】(下)
Mybatis实战练习四【单个条件(动态SQL)&添加数据】
|
SQL 存储 关系型数据库
【MYSQL高级】Mysql 表的七种连接方式【附带练习sql】
【MYSQL高级】Mysql 表的七种连接方式【附带练习sql】
237 0
|
6月前
|
SQL 存储 数据库
技术好文:SQL查询语句基本练习
技术好文:SQL查询语句基本练习
|
SQL Java 数据库连接
Mybatis实战练习四【单个条件(动态SQL)&添加数据】(上)
Mybatis实战练习四【单个条件(动态SQL)&添加数据】
|
7月前
|
SQL
SQL语句多表查询练习
SQL语句多表查询练习
36 0
|
7月前
|
SQL 关系型数据库 MySQL
mysql查询语句练习总结(涵盖所有sql语法)
mysql查询语句练习总结(涵盖所有sql语法)
|
SQL 算法 JavaScript
在线就能用的 SQL 练习平台(附SQL学习文档)
在线就能用的 SQL 练习平台(附SQL学习文档)
601 0
|
SQL 数据挖掘 数据库
牛客网之SQL刷题练习——一个实用的网站
牛客网之SQL刷题练习——一个实用的网站
394 0