mysql 复杂选择查询

标签 mysql select count

我有 4 张 table :

user,
administrative_division,
assignment,
user_has_assignment

用户和管理部门之间存在多对一关系,其中多个是用户,一个是管理部门。用户和分配之间通过 user_has_assignment 表存在多对多关系。

我可以使用以下命令获取每个管理分区中有多少用户:

select division_id, count(*) from user group by division_id;

例如,这给了我这样的东西:

division_id count(*)
  1           4
  2           10

等等

我可以使用以下命令获取每个用户拥有多少个作业:

select user_id, count(*) from user_has_assignment group by user_id;

给出了类似的结果

user_id count(*)
   1       2
   2       10

但我不知道如何在一个查询中获得这样的结果:

division_id  user_count assignment_count
     1           10            20 
     2            2            4

其中 user_count 是每个管理部门中的用户总数,分配计数是某个特定管理部门中的用户拥有的所有分配的总数。

最佳答案

您只需连接上面的表并按 devision_id 对结果进行分组,这样您就可以为每个设备获得一行,如下所示:

SELECT ad.devision_id,
       COUNT(DISTINCT u.user_id) AS user_count,
       COUNT(DISTINCT a.assignment_id) AS assignment_count
FROM user u
     JOIN administrative_division ad ON u.devision_id = ad.devision_id
     LEFT JOIN user_has_assignment ucon ON u.user_id = ucon.user_id
     LEFT JOIN assignment a ON a.assignment_id = ucon.assignment_id

检查查询中的字段名称并相应地替换它们,以便查询能够在您的架构上运行。

关于mysql 复杂选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5390986/

相关文章:

mysql - 在 rails 中从 mysql 迁移到 postgresql

MySQL 添加、DATE_FORMAT 和 CONCAT_WS

MySQL:如何从表中选择除最后一行之外的所有行

mysql - 加入 : Incorrect result when SUM() is used and only one record is displayed

r - 如何在 r 中的第一个观察值和前两个连续的负值观察值之间找到观察值的数量

php - 连接并计算mysql中的多行

mysql - 让 Hibernate 尊重 MySQL 和 PostgreSQL 中的序列

java - JDBC 远程 MySQL 连接

mysql - 如何从我在 mysql WorkBench 中设计的 ER 图获取代码?

从第二个表开始计数时 MySQL 查询速度问题