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

SQL中如何按特定年份分组:统计2023年入职员工的薪资总和与平均值

筛选2023年入职员工并统计薪资总和与平均值

要实现这个需求,关键是先筛选出2023年入职的员工记录,再对他们的薪资做聚合计算。你提供的参考代码用了GROUP BY YEAR(hire_date),这会按入职年份分组统计所有年份的数据,不符合仅针对2023年的需求,下面是正确的实现方式:

基础实现(适配多数数据库)

直接通过YEAR()函数提取入职年份进行筛选,写法简单直观:

SELECT 
  SUM(monthly_salary) AS total_salary,
  AVG(monthly_salary) AS average_salary
FROM employees_list
WHERE YEAR(hire_date) = 2023;

性能优化写法(推荐)

如果hire_date字段建有索引,使用日期范围查询比调用YEAR()函数更高效,因为函数会导致索引失效。不同数据库的写法略有差异:

  • MySQL/PostgreSQL:
SELECT 
  SUM(monthly_salary) AS total_salary,
  AVG(monthly_salary) AS average_salary
FROM employees_list
WHERE hire_date BETWEEN '2023-01-01' AND '2023-12-31 23:59:59';
  • SQL Server:
SELECT 
  SUM(monthly_salary) AS total_salary,
  AVG(monthly_salary) AS average_salary
FROM employees_list
WHERE hire_date >= '2023-01-01' AND hire_date < '2024-01-01';
  • Oracle:
SELECT 
  SUM(monthly_salary) AS total_salary,
  AVG(monthly_salary) AS average_salary
FROM employees_list
WHERE hire_date >= TO_DATE('2023-01-01', 'YYYY-MM-DD') 
  AND hire_date < TO_DATE('2024-01-01', 'YYYY-MM-DD');

对原参考代码的说明

原代码的GROUP BY YEAR(hire_date)会将所有年份的入职数据按年份分组,返回每一年的薪资统计结果。如果你的需求只是获取2023年的单独统计,这个分组操作完全多余,反而会返回无关年份的数据,因此必须去掉分组,同时添加WHERE条件筛选2023年的记录。

内容的提问来源于stack exchange,提问作者Prado. David Joshua

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:41:11