我有一个学生数据库,其中每个学生都有基于其所有学历的多个记录。
我想分别找到每个学生的最低学历。
我已经尝试根据条件对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
答案 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。