验证Netezza SQL按初始专业分组统计在校年限逻辑正确性
SQL逻辑验证:初始专业对在校年限的影响分析
你的SQL逻辑完全符合需求,以下是具体验证说明:
核心逻辑拆解
1. 获取学生初始专业(CTE earliest_major)
通过ROW_NUMBER() OVER (PARTITION BY student_id ORDER BY year)为每个学生的记录按年份排序,取第一条(rn=1)的current_major作为初始专业。由于题目明确首年不可转专业,这一步能准确获取每个学生入学时的专业,逻辑正确。
2. 生成学生在校年份组合(子查询a)
按student_id分组,用MAX(CASE...)标记学生是否在对应年份有在校记录(同一年多次转专业或考试不影响,只要存在记录就标记为1),最终得到每个学生的在校年份组合(如2010和2013年在校则对应year_2010=1, year_2013=1,其余为0),这一步准确统计了每个学生的在校年份分布。
3. 关联分组统计
将学生的年份组合与初始专业关联后,按初始专业和年份组合分组计数,实现了"先统计各学生在校年份组合及对应人数,再按初始专业分组"的需求,逻辑闭环完整。
基于样本数据的预期输出
根据你提供的样本数据集,执行该SQL会得到以下结果:
| earliest_major | year_2010 | year_2011 | year_2012 | year_2013 | year_2014 | year_2015 | COUNT(*) |
|---|---|---|---|---|---|---|---|
| Science | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
| Science | 1 | 1 | 0 | 1 | 0 | 0 | 1 |
| Arts | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
| Arts | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
| Arts | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
这个结果完全匹配样本数据中各学生的初始专业和在校年份分布,进一步验证了逻辑的正确性。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

