我已经加入了我的表格,这样每个条目都是唯一的,我希望得到一个COUNT()值,用于教师教授的多少独特课程。我想我会制作一个不同课程的表,然后根据老师的ID进行计数,但是这并不能说明没有教授课程的老师,我希望在这种情况下返回零值。我如何获得这些零值?
表格供参考:
id | name | course_id | sec_id | semester | year
-------+------------+-----------+--------+----------+------
33456 | A | | | |
10101 | B | CS-101 | 1 | Fall | 2009
76766 | C | BIO-301 | 1 | Summer | 2010
12121 | D | FIN-201 | 1 | Spring | 2010
10101 | B | CS-347 | 1 | Fall | 2009
76543 | E | | | |
83821 | F | CS-319 | 2 | Spring | 2010
83821 | F | CS-190 | 2 | Spring | 2009
98345 | G | EE-181 | 1 | Spring | 2009
10101 | B | CS-315 | 1 | Spring | 2010
22222 | H | PHY-101 | 1 | Fall | 2009
45565 | I | CS-101 | 1 | Spring | 2010
15151 | J | MU-199 | 1 | Spring | 2010
32343 | K | HIS-351 | 1 | Spring | 2010
83821 | F | CS-190 | 1 | Spring | 2009
45565 | I | CS-319 | 1 | Spring | 2010
76766 | C | BIO-101 | 1 | Summer | 2009
58583 | L | | | |
PS。我相信我正在使用PostgreSQL。
[编辑]预期结果是一个id,名称和一个数字表,显示了老师所教授的课程数量,如果他们没有教授任何课程,则包括0。
[编辑2]我只需要对此表进行查询,所有其他工作都已完成。如果course_id,sec_id,semester,year没有值,则该教师不教授课程(对于教师A,E和L;他们的计数为0)。我只需要一种方法来计算这些课程,没有别的。
答案 0 :(得分:1)
我们假设表名是t:
select distinct count(course_id) filter (where course_id is not null) over (partition by id,name),id, name
from t
order by name;
count | id | name
-------+-------+--------------
0 | 33456 | A
3 | 10101 | B
2 | 76766 | C
1 | 12121 | D
0 | 76543 | E
3 | 83821 | F
1 | 98345 | G
1 | 22222 | H
2 | 45565 | I
1 | 15151 | J
1 | 32343 | K
0 | 58583 | L
(12 rows)
https://www.postgresql.org/docs/current/static/sql-expressions.html
答案 1 :(得分:0)
我相信,这个查询应该可以胜任:
SELECT COUNT(DISTINCT course_id),t.id,name FROM courses r Right Outer JOIN teacher t ON(r.id = t.id)group by t.id,name;
我认为,并非所有教师都在桌面上提供,因此需要外部加入。在Oracle上的类似数据库上进行了测试。
答案 2 :(得分:0)
使用join
执行subquery
以查找教师课程计数
select t.name, coalesce(c.course_count, 0) course_count
from table t left join (
select name, count(distinct course _id) course_count
from table
group by name
) c on c. name = t.name
group by t.name