0

三天来,我一直在想办法解决这个问题。一般来说,我是 Maria db 和 sql 的新手。我已经设法UNION在以前的类似情况下使用过,但在这种情况下不起作用。

我有三个表如下:

create table zipcode (zip int, city varchar(30))
create table student (id int, zip_fk int)
create table teacher (id int, zip_fk int)

我想创建一个包含以下字段的选择查询:城市、该城市的学生人数、该城市的教师人数以及该城市的学生和教师总数。本质上,结果应该按城市分组。我完全不知所措。

编辑。我面临的挑战是该city字段位于不同的表中,并且不是主键或外键。因此,我不能直接使用它。主要的关键是zip这意味着我首先必须从他们各自的表中派生出学生和教师,然后引入邮政编码表来比较他们的邮政编码和城市。

4

1 回答 1

0

这是相当棘手的。union all这是使用and的一种方法group by

select city, sum(student) as students, sum(teacher) as teachers
from ((select z.city, 1 as student, 0 as teacher
       from student s join
            zipcode z
            on s.zip_fk = z.zip
      ) union all
      (select z.city, 0 as student, 1 as teacher
       from teacher t join
            zipcode z
            on t.zip_fk = z.zip
      )
     ) st
group by city;
于 2019-07-25T11:47:33.473 回答