【问题标题】:mysql complex select querymysql复杂选择查询
【发布时间】:2011-03-22 12:12:23
【问题描述】:

我有 4 张桌子:

user,
administrative_division,
assignment,
user_has_assignment

在用户和管理部门之间存在多对一的关系,其中多是用户,一个是管理部门。在 user 和 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 是每个管理部门的用户总数,assignment_count 是一个特定管理部门的用户拥有的所有分配的总数。

【问题讨论】:

  • 如果您的部门中有两个用户具有相同的分配,您希望发生什么?这会在计数中增加 1 还是 2?

标签: mysql select count


【解决方案1】:

您只需加入上面的表格并按 devision_id 对结果进行分组,这样您就可以像这样得到每个 devision 的一行:

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

检查查询中的字段名称并相应地替换它们,以便查询适用于您的架构。

【讨论】:

  • @Nurzhan : 完全没问题 - 如果您的问题得到解答,请务必检查正确答案,以帮助可能遇到类似问题的其他人
  • @Nurzhan,如果一个部门中的两个用户有相同的分配,我认为这不会使计数增加 2。
猜你喜欢
  • 2013-03-16
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多