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