我有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拥有的所有分配的总和。
答案 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
检查查询中的字段名称并相应地替换它们,以便查询可以处理您的架构。