mysql复选择查询

时间:2011-03-22 12:12:23

标签: mysql select count

我有4张桌子:

user,
administrative_division,
assignment,
user_has_assignment

在user和administrative_division之间存在多对一关系,其中许多是用户,一个是administrative_division。在用户和赋值之间,通过user_has_assignment表存在多对多关系。

我可以使用此命令获取每个administrative_division中的用户数:

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是每个administrative_division中的用户总数,assignment_count是用户从一个特定administrative_division拥有的所有分配的总和。

1 个答案:

答案 0 :(得分:2)

你只需要加入上面的表并按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

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