[英]SQL GROUP BY column from related table
我有桌子T1
ID RESOLVER RESOLVEDBY
1 A GROUP1
2 A GROUP1
3 A GROUP1
4 B GROUP1
5 B GROUP1
我也有桌子T2
GROUPID GROUP PERSON
1 GROUP1 A
2 GROUP1 B
3 GROUP1 C
我进行了此SQL查询,该查询返回每个人可以解析多少条记录
select resolver,count(*) from T1
where resolvedby='GROUP1'
group by resolver
它正确返回
A 3
B 2
但是,我还想检索属于该组的所有人员的统计信息,因此对于用户CI而言,其值应为0。因此最终结果应为
A 3
B 2
C 0
根据您的编辑:
您需要将现有的Select外部连接到第二个表:
select t2.person, coalesce(cnt, 0)
from T2
left join
( -- aggregate before join (usually more efficient)
select resolver,count(*) as cnt
from T1
where resolvedby='GROUP1'
group by resolver
) as T1
on T1.resolver=T2.person
where t2."GROUP"='GROUP1' -- adding double quotes as GROUP is usually a keyword
外部将计数添加到人员表。 当T2中没有任何条目时,使用COALESCE
显示0。
select t2.person, t2.group, coalesce(counted.cnt, 0)
from t2
left join
(
select resolver, resolvedby, count(*) as cnt
from T1
group by resolver, resolvedby
) counted on counted.resolver = t2.person and counted.resolvedby = t2.group
where t2.group = 'GROUP1';
您也可以在select子句中使用子查询:
select
t2.person,
t2.group,
(select count(*) from t1 where t1.resolver = t2.person and t1.resolvedby = t2.group)
from t2
where t2.group = 'GROUP1';
您需要外部联接才能从T2返回所有记录。 下面的查询使用RIGHT OUTER JOIN
返回T2的所有行(即包括C的行),并获取每个行的匹配计数:
select T2.PERSON, count(T1.ID) from T1
right outer join T2 on T2.PERSON=T1.RESOLVER
where T2.group ='GROUP1' -- If this was T1.group, we'd have to use COALESCE() to prevent dropping out rows in T2 that don't have a resolution in T1
group by T2.PERSON
上面,我们使用右外部联接,因为我们需要从表/表达式到语句right outer join
右边的所有行。 如果我们首先用T2
编写了查询的FROM
子句,那将是这样的左外部FROM
: ...T2 left outer join T1...
FROM
...T2 left outer join T1...
使用以下查询可根据您的要求获得预期的输出。
select person,count(resolver) from t2 left join t1 on t2.groups=t1.groups and t2.person = t1.resolver group by person;
OUTPUT :
mysql> select person,count(resolver) from t2 left join t1 on t2.person = t1.resolver group by person;
+--------+-----------------+
| person | count(resolver) |
+--------+-----------------+
| A | 4 |
| B | 3 |
| C | 0 |
+--------+-----------------+
3 rows in set (0.01 sec)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.