Mariadb 如何在 select 查询中使用组、联合、and/or sum/count

Maria db how to use groups, unions, and/or sum/count in a select query

三天来,我一直在绞尽脑汁想弄清楚这个问题。一般来说,我是 Maria db 和 sql 的新手。我已经设法在以前的类似情况下使用 UNION 但它在这个情况下不起作用。

我有3个table如下:

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

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

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

这有点棘手。这是使用 union allgroup 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;