如果您有两个表来加入以收集数据,但想要删除重复项 - 这是如何完成的?
我有两张桌子;学生和课程
学生可以多次参加一门课程,但在询问过去一年中有多少学生参加了123课程。 - 你不想多次计算那个学生,即使他可能多次参加过该课程。
示例代码:
select student_id
from student_table
join course_table using (student_id)
where course_id = 123
and date_taken between '01-JAN-14' AND '31-DEC-14'
当我跑步时,我会让一些学生出现2到3次,因为他们可能在这段时间内完成了2到3次课程(失败一次或两次,不得不重修课程2或3次)。
此外,还有一种快速的方法可以在显示时按字母顺序对它们进行排序吗?
答案 0 :(得分:0)
只需按student_id
分组:
select student_id
from student_table
join course_table using (student_id)
where course_id = 123 and
date_taken between '01-JAN-14' AND '31-DEC-14'
group by student_id;
您可以使用order by
进行排序:
select student_name, student_id
from student_table
join course_table using (student_id)
where course_id = 123 and
date_taken between '01-JAN-14' AND '31-DEC-14'
group by student_id
order by student_name asc;
顺便说一句,你可能想要使用真正的日期而不是字符串 - 就像你所做的那样:
select student_name, student_id
from student_table
join course_table using (student_id)
where course_id = 123 and
date_taken between TO_DATE('2014/01/01', 'yyyy/mm/dd') AND
TO_DATE('2014/12/31', 'yyyy/mm/dd')
group by student_id
order by student_name asc;
答案 1 :(得分:0)
要查找所有参加过课程的学生(至少一次),请使用distinct
:
select distinct student_table.*
from student_table
join course_table using (student_id)
where course_id = 123
and date_taken between '01-JAN-14' AND '31-DEC-14'
要简单计算有多少不同的学生参加课程,请使用COUNT(DISTINCT student_id)
:
select count(distinct student_id)
from course_table
where course_id = 123
and date_taken between '01-JAN-14' AND '31-DEC-14'
另请注意您不需要加入学生表计数。