我试图通过单个SQL语句获取注册课程的学生人数,但不使用子查询。到目前为止,我只能弄清楚如何使用子查询来做到这一点。还有另一种方式吗?
考虑以下数据库设置:
create table student (id integer not null primary key); create table course_enrolment (student integer not null references student, course integer not null); insert into student values (1); insert into student values (2); insert into student values (3); insert into course_enrolment values (2,20); insert into course_enrolment values (2,30); insert into course_enrolment values (3,10);
我想获得参加课程的学生人数。在这种情况下,它是2。
我可以使用子查询轻松实现这一目标:
SELECT COUNT(*)FROM(从COURSE_ENROLMENT选择DISTINCT学生)作为数据;
我想在不使用子查询的情况下获取计数。
我正在使用Postgresql 8.3,但我正在寻找与供应商无关的解决方案。
答案 0 :(得分:8)
这个怎么样:
SELECT course, COUNT(DISTINCT student)
FROM course_enrolment
GROUP BY course
这为学生提供了每门课程。如果您只想要在任何课程上注册的总人数:
SELECT COUNT(DISTINCT student)
FROM course_enrolment
我认为这是所有ANSI标准的SQL,所以应该在大多数地方工作。
答案 1 :(得分:2)
我不知道postgres,但是在SQL Server上:
SELECT COUNT(DISTINCT STUDENT) FROM COURSE_ENROLMENT
答案 2 :(得分:2)
我对Postgresql了解不多,但我就是这样做的MS SQL Server ......
select count(distinct student)
From course_enrolment
答案 3 :(得分:1)
SELECT COUNT(DISTINCT STUDENT) FROM COURSE_ENROLMENT
答案 4 :(得分:1)
这是为了选择学生:
select course, count(*) as students
from course_enrolment
group by course
这只是为了计算学生(希望不是特定的SQL Server特定的)
select count(distinct student) from course_enrolment
答案 5 :(得分:1)
真正的问题是你为什么不想使用子查询?
一般来说,每个人都以正确的方式回答:
select count(distinct student) from course_enrolment
但是对于大量的学生/课程来说,8.4之前的PostgreSQL中的这种类型的查询会很慢。更快的方法是:
select count(*) from (select student from course_enrolment group by student);
但它使用子查询 - 由于某种原因,你不需要。
答案 6 :(得分:0)
select COUNT(distinct student) from course_enrolment