SQL按分组取最小值:需包含所有学生且无对应值时DATE为NULL
解决方案:返回所有学生的首次SCORE=2日期(无则为NULL)
原SQL通过WHERE SCORE=2过滤后分组,只会返回存在该分数记录的学生。要包含所有学生且无匹配时日期为NULL,可采用以下两种方式:
方式一:左连接子查询
先单独统计有SCORE=2记录的学生最早日期,再关联所有学生:
SELECT DISTINCT t.STUDENT, sub.min_date FROM t LEFT JOIN ( SELECT STUDENT, MIN(DATE) AS min_date FROM t WHERE SCORE = 2 GROUP BY STUDENT ) sub ON t.STUDENT = sub.STUDENT ORDER BY t.STUDENT;
方式二:条件聚合(更简洁)
直接对所有学生分组,通过条件筛选后取最小日期,无匹配记录时MIN()会返回NULL:
SELECT STUDENT, MIN(CASE WHEN SCORE = 2 THEN DATE END) AS min_date FROM t GROUP BY STUDENT ORDER BY STUDENT;
两种方法都会返回所有5个学生的记录,其中学生4、5的min_date字段为NULL,完全符合需求。
内容的提问来源于stack exchange,提问作者bvowe
相关产品推荐
相关产品推荐

