簡體   English   中英

相關表中的SQL GROUP BY列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM