You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL表关联与函数使用求助:基于测试员工库的3个查询实现

MySQL表关联与聚合函数实战解答

现有代码问题说明

  • 需求1现有代码未关联员工表筛选出生日期,也未做去重处理,同一个员工多条职位记录会被重复统计
  • 需求2现有代码统计的是各部门平均薪资,而非要求的各职位平均薪资,关联的表对象错误

各需求正确实现与逻辑说明

需求1:统计1965-01-01之后出生的每个职位对应的员工数量

SELECT 
  t.title,
  COUNT(DISTINCT t.emp_no) AS `Number Of Employees`
FROM titles t
INNER JOIN employees e ON t.emp_no = e.emp_no
WHERE e.birth_date > '1965-01-01'
GROUP BY t.title;
  • 关联职位表titles和员工信息表employees,关联键为员工编号emp_no
  • 用WHERE子句筛选出生日期符合要求的员工
  • COUNT(DISTINCT emp_no)避免同一员工多段职位任职记录被重复计数
  • 按职位字段title分组输出结果

需求2:统计每个职位对应的平均薪资

SELECT 
  t.title,
  AVG(s.salary) AS `Average Salary`
FROM titles t
INNER JOIN salaries s ON t.emp_no = s.emp_no
-- 可选补充时间匹配条件,避免员工历史职位和当前薪资错配:
-- WHERE s.from_date BETWEEN t.from_date AND t.to_date
GROUP BY t.title;
  • 关联职位表titles和薪资表salaries,关联键为员工编号emp_no
  • 用聚合函数AVG()计算每个分组的薪资平均值
  • 按职位字段title分组输出结果

需求3:统计1990年至1992年期间,市场部的薪资总支出

SELECT 
  SUM(s.salary) AS `Total Salary Expenditure`
FROM departments d
INNER JOIN dept_emp de ON d.dept_no = de.dept_no
INNER JOIN salaries s ON de.emp_no = s.emp_no
WHERE 
  d.dept_name = 'Marketing'
  AND s.from_date >= '1990-01-01' 
  AND s.to_date <= '1992-12-31';
  • 依次关联部门表departments、员工部门映射表dept_emp、薪资表salaries
  • 第一层筛选部门名称为市场部,第二层筛选薪资发放时间落在1990-1992年范围内
  • 用聚合函数SUM()汇总所有符合条件的薪资记录,得到总支出金额

内容的提问来源于stack exchange,提问作者user14343607

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:15:03