2009-04-08 78 views
1

我想通過單個SQL語句獲取註冊課程的學生數量,但不使用子查詢。到目前爲止,我只能弄清楚如何使用子查詢來做到這一點。有另一種方法嗎?簡單的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(SELECT DISTINCT青年從COURSE_ENROLMENT)視爲數據;

我想獲得計數而不使用子查詢。

我正在使用Postgresql 8.3,但正在尋找供應商不可知的解決方案。

+0

你也可以用u來拼寫顏色;) – Mike 2009-04-08 19:09:22

回答

8

如何:

SELECT course, COUNT(DISTINCT student) 
FROM course_enrolment 
GROUP BY course 

這使每門課程的學生。如果你只是想報名參加任何課程總數:

SELECT COUNT(DISTINCT student) 
FROM course_enrolment 

我相信這是所有ANSI標準的SQL,所以應該工作最多的地方。

1
SELECT COUNT(DISTINCT STUDENT) FROM COURSE_ENROLMENT 
2

我不知道的Postgres,但SQL Server上:

SELECT COUNT(DISTINCT STUDENT) FROM COURSE_ENROLMENT 
+1

確認這個對PostgreSQL有效 – denysonique 2013-02-15 00:00:39

1

這是選擇的學生按課程:

select course, count(*) as students 
from course_enrolment 
group by course 

而這僅僅是數學生(希望不是可怕的SQL Server特定的)

select count(distinct student) from course_enrolment 
2

我不知道很多關於PostgreSQL的,但是這是我會怎麼做的MS SQL Server ...

select count(distinct student) 
From course_enrolment 
1

真正的問題是,爲什麼你不希望使用子查詢?

一般大家都回答正確的方法:

select count(distinct student) from course_enrolment 

但在前期8.4 PostgreSQL的這種類型的查詢將是大量的學生/課程慢。更快的方法是:

select count(*) from (select student from course_enrolment group by student); 

但它使用子查詢 - 出於某種原因,你不想要的。

3
select COUNT(distinct student) from course_enrolment