在PostgreSQL中,如何在运行另一个函数(如count)时连接两个表

时间:2013-04-26 01:44:29

标签: sql postgresql join

my prior question about joins继续我现在遇到连接问题并使用计数功能进行比较。

我有一个名为科目的表

subno   subname   quota
30006   Math      300    
31445   Science   400 
31567   Business  250

我还有一个名为enrollment

的表
subno sno   
30009 980008
4134  988880
31567 900890

等。 (转换为SQLFiddle:http://sqlfiddle.com/#!12/dcd01 - Craig)

如何列出主题编号和名称哪个配额小于平均主题配额。这意味着我需要计算一个表中学生的数量并与另一个表进行正确比较吗?

2 个答案:

答案 0 :(得分:2)

最终确定问题(从评论中推断)为:

  

列出所有空缺的科目

您需要的查询是:

select
    subno,
    subname,
    quota,
    quota - count(sno) as vacancies
from subjects s
left join enrollments e on e.subno = s.subno
group by 1, 2, 3
having quota - count(sno) > 0

我还在vacancies列中添加了一列,其中显示了剩余的空缺数量。

注意:您拼错了“注册”(正确的拼写只有一个 L) - 我建议您将表重命名为正确的拼写,以避免将来混淆。

答案 1 :(得分:0)

select a.subno,b.subname 
from
(select subno, count(sno) as cnt from enrollment
group by 1
having count(sno)<(select avg(quota) from subjects)
) as a 

inner join 

(select * from subjects) as b 
on a.subno=b.subno