2026

04/04
地点:世界梦想

期
待
改
变
Here's to the changes we'll make, one practice at a time.

采取刷题-总结-输出的形式学会SQL
接下来这段时间我会直接去做真题,并且总结知识点、输出
1
题号:SQL59
题目:统计各个部门平均薪资
< 难度 | 简 单 >
具体要求:请统计各个部门平均实发薪资?
注:实发薪资=标准薪资-扣除薪资,统计平均薪资要求剔除薪资小于4000和大于30000的员工
要求输出:部门,平均实发薪资(保留3位小数)按照平均实发薪资降序排序


解析:
表连接:有部门、有薪资,所以两个表都要用到,使用join,关联条件staff_id
计算实发薪资=sa.normal_salary-sa.dock_salary_id
过滤薪资:between 4000 and 30000
平均且保留三位小数:使用avg和round
最后排序:按实发薪资降序desc
SELECTs.department,--部门平均实发薪资计算:ROUND(AVG(sa.normal_salary - sa.dock_salary), 3) AS avg_salaryFROMstaff_tb s-- 表连接:JOIN salary_tb sa ON s.staff_id = sa.staff_id-- 使用between and框选范围:WHERE(sa.normal_salary - sa.dock_salary) BETWEEN 4000 AND 30000GROUP BY-- 按部门分组,计算每个部门平均实发薪资:s.departmentORDER BY--降序排序avg_salary DESC;
2
题号:SQL64
题目:商品交易(网易校招笔试真题)
< 难度 | 简 单 >
具体要求:查找购买个数超过20,质量小于50的商品,按照商品id升序排序。


解析:
商品质量和购买个数在两个表,同样需要进行表连接,使用id进行关联
计算商品购买数量 sum
筛选质量小于50使用having
selectt.goods_id as id,g.name,g.weight,--计算商品购买数量sum(count) as totalfromgoods g--表连接join trans t on g.id = t.goods_idgroup by--分组,非聚合函数都要出现在这里t.goods_id,g.name,g.weight-- 筛选符合的商品havingsum(count) >20and g.weight <50-- 商品id升序排序order byt.goods_id asc;
知识点

执行顺序
FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
where和having的使用
这一题因为涉及聚合函数sum,所以不使用where

易错点
where不能过滤聚合结果:
❌ where sum(count) > 20
✅having sum(count) > 20
非聚合字段都要出现在GROUP BY:
select有id和name,如果group by 中没有name是错的
❌select goods_id, name from goods
group by goods_id
✅select goods_id, name from goods
group by goods_id,name(非聚合字段都要写,因为可能会存在id有多个name对应情况)

求点赞

求分享

求喜欢

2026-04-04
题目来源:“牛客网-SQL篇-SQL大厂笔记真题”;
今天的比较简单,要注意的是易错点部分。
Learning