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

如何用SQL从Term和Year字段计算并查询学年数据?

按学年高效查询的SQL与R实现方案

SQL 高效查询方案

针对多学年查询,无需编写重复的OR条件,可通过学年起始年的逻辑统一筛选:

  • Fall学期的学年起始年等于当前Year
  • Spring/Summer学期的学年起始年等于当前Year减1

写法1:生成学年起始年字段(便于查看与后续分析)

SELECT *,
       -- 计算每条记录对应的学年起始年
       CASE 
           WHEN TERM = 'Fall' THEN Year
           ELSE CAST(CAST(Year AS INT) - 1 AS VARCHAR(4))
       END AS academic_year_start
FROM DTA_Set1
-- 筛选目标学年的起始年,比如AY2021-22(2021)、AY2022-23(2022)
WHERE academic_year_start IN ('2021', '2022');

写法2:直接在WHERE子句中判断(更简洁)

SELECT *
FROM DTA_Set1
WHERE 
    -- Fall学期匹配目标起始年
    (TERM = 'Fall' AND Year IN ('2021', '2022'))
    OR 
    -- Spring/Summer学期匹配「当前年份-1」的目标起始年
    (TERM IN ('Spring', 'Summer') AND CAST(Year AS INT) - 1 IN (2021, 2022));

只需修改IN中的值,即可快速切换或添加多个目标学年,无需重复编写OR分支。


R 数据筛选方案

针对你的示例数据Sam_Data,先统一学期名称的大小写(避免匹配误差),再用相同的学年逻辑筛选:

步骤1:统一学期格式并生成学年起始年

# 统一TERM为大写,避免大小写不一致导致的判断错误
Sam_Data$TERM <- toupper(Sam_Data$TERM)

# 计算每条记录的学年起始年
Sam_Data$academic_year_start <- ifelse(
  Sam_Data$TERM == "FALL",
  Sam_Data$Year,
  as.character(as.integer(Sam_Data$Year) - 1)
)

# 筛选目标学年(比如AY2016-17、AY2017-18)
target_start_years <- c("2016", "2017")
filtered_data <- Sam_Data[Sam_Data$academic_year_start %in% target_start_years, ]

步骤2:直接筛选(无需生成额外字段)

如果不需要保留学年起始年字段,可直接在索引中完成判断:

Sam_Data$TERM <- toupper(Sam_Data$TERM)
target_start_years <- c(2016, 2017)

filtered_data <- Sam_Data[
  (Sam_Data$TERM == "FALL" & as.integer(Sam_Data$Year) %in% target_start_years) |
  (Sam_Data$TERM %in% c("SPRING", "SUMMER") & (as.integer(Sam_Data$Year)-1) %in% target_start_years),
  ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:35:18