从主数据库中查找学生的最低学历

时间:2019-03-25 12:12:13

标签: php postgresql

我有一个学生数据库,其中每个学生都有基于其所有学历的多个记录。
我想分别找到每个学生的最低学历。

我已经尝试根据条件对SQL查询进行分组,但这会产生所有记录。

select student_id,qualification
from student
group by qualification
order by qualification ASC

对于EX:原始表格

1 SSC 50
1 HSC 60
2 SSC 80
2 HSC 60
2 Grad 50
3 HSC 70
4 SSC 70
4 Diploma 70

预期结果

1 SSC 50
2 SSC 80
3 HSC 70
4 SSC 70

1 个答案:

答案 0 :(得分:2)

如果您将数据分为资格字段和得分字段,那么使用MIN()很简单。您必须在选择的所有字段上GROUP BY,以便我们可以找到MIN()最低的资格,然后将其加入以获取其他相关列,例如qualifications

我认为Diplomia不是有效的资格?

create table students (
  student_id int,
  qualification varchar(128),
  score int
);

insert into students (student_id, qualification, score)
values
(1, 'SSC', 50),
(1, 'HSC', 60),
(2, 'SSC', 80),
(2, 'HSC', 60),
(2, 'Grad', 50),
(3, 'HSC', 70),
(4, 'SSC', 70),
(4, 'Diploma', 70);

然后使用MIN()进行简单查询-请记住,在使用聚合函数(例如GROUP BY)时,您总是必须使用MIN()

SELECT * 
FROM students 
JOIN (
  SELECT student_id, MIN(score) as score
  FROM students
  GROUP BY student_id
) min_score USING (student_id, score)
WHERE qualification <> 'Diploma'

输出变为

student_id  score   qualification
1           50      SSC
2           50      Grad
3           70      HSC
4           70      SSC

请参阅此live demo