Sql 从包含外键的同一表中选择2个计数

Sql 从包含外键的同一表中选择2个计数,sql,postgresql,select,count,Sql,Postgresql,Select,Count,我在做这个查询时遇到了一些麻烦,我可以做两个不同的查询。让我们开始吧 编辑:我正在使用PostgreSQL 我有一张儿童桌和一张教室桌,儿童桌上有一个名为“教室id”的FK到教室 我需要什么?简单计算所有教室的数量,以及至少有两个孩子在其中的所有教室的数量 正如我所说,我可以这样做: select count(classroom.id) "Total" from classroom 第二种方法可以有两种不同的方式 select count(with_

我在做这个查询时遇到了一些麻烦,我可以做两个不同的查询。让我们开始吧

编辑:我正在使用PostgreSQL

我有一张儿童桌和一张教室桌,儿童桌上有一个名为“教室id”的FK到教室

我需要什么?简单计算所有教室的数量,以及至少有两个孩子在其中的所有教室的数量

正如我所说,我可以这样做:

select
    count(classroom.id) "Total"
from
    classroom
第二种方法可以有两种不同的方式

select
    count(with_students)
from
     (
    select
        classroom.id, count(child.classroom_id) as "students"
    from
        classroom
    inner join child on
        child.classroom_id = classroom.id
    where
        is_active = true
    group by
        classroom.id, child.classroom_id
    having
        count(child.classroom_id) > 1 ) as with_students
问题是,我使用的工具不允许我组合两个不同的查询来输出一个图表,这正是我所需要的

我读过很多关于计数的例子,但是我找不到任何与我需要的类似的例子


如果有任何帮助,我们将不胜感激。

使用子查询计算每个教室的学生人数-不包括任何学生。然后再次汇总:

select count(*) as num_classrooms,
       sum(case when num_students >= 2 then 1 else 0 end)
from (select cr.id, count(ch.classroom_id) as num_students
      from classroom cr left join
           child ch
           on ch.classroom_id = cr.id and
              ch.is_active = true
      group by cr.id
     ) x;

注意:我不确定是针对孩子还是针对教室。这假设它是针对孩子的。

使用子查询来计算每个教室中的学生人数-不包括任何学生。然后再次汇总:

select count(*) as num_classrooms,
       sum(case when num_students >= 2 then 1 else 0 end)
from (select cr.id, count(ch.classroom_id) as num_students
      from classroom cr left join
           child ch
           on ch.classroom_id = cr.id and
              ch.is_active = true
      group by cr.id
     ) x;

注意:我不确定是针对孩子还是针对教室。这假设是为孩子准备的。

您使用的是什么数据库?对不起。PostgreSQL我将它添加到问题中。您使用的是什么数据库?对不起。PostgreSQL我将把它添加到问题中。是的,这就成功了。第二次算的时候只打了一个错,你应该算的是ch.School_id.是的,这就成功了。在第二次计数中只输入了一个错别字,您应该在计算ch.U.id。