2014-10-29 69 views
0

我有两个SQL选择。SQL连接两个计数选择

第一:

SELECT v.red_club, count(v.red_club) 
FROM v_round as v 
GROUP BY v.red_club 

和它返回:

red_club count(v.red_club) 
ABC  22 
DEF  12 
XYZ  4 

第二选择:

SELECT v.green_club, count(v.green_club) 
FROM v_round as v 
GROUP BY v.green_club 

和它返回:

green_club count(v.green_club) 
ABC  5 
DEF  9 
XYZ  33 

我如何加入计数一起(在一个选择),这样的结果是这样的:

club count(total) 
ABC  27 
DEF  21 
XYZ  37 
+0

如果green_club填充,这是否意味着red_club为空? – paqogomez 2014-10-29 20:36:11

回答

3

你试过UNION-ING每个查询的结果?

SELECT lbl, SUM(cnt) 
FROM(
    SELECT v.red_club lbl, count(v.red_club) cnt 
    FROM v_round as v 
    GROUP BY v.red_club 
    UNION ALL 
    SELECT v.green_club lbl, count(v.green_club) cnt 
    FROM v_round as v 
    GROUP BY v.green_club 
) 
Group by lbl 
+0

这取决于组的名称。如果绿色和红色俱乐部有相同的名字:3行。如果它们全都不同:6.这就是为什么我们按lbl分组。 使用UNION'ALL'是因为SQL将删除重复行:如果Green俱乐部的名称为A并且计数为10并且红色俱乐部的名称为A计数为10,则SQL将只返回1条记录,这意味着你的款项将关闭。 – 2014-10-29 20:48:36

0

像这样的事情

select red.red_club as club, rcount+gcount as cout 
from 
(
SELECT v.red_club, count(v.red_club) as rcount 
FROM v_round as v 
GROUP BY v.red_club 
) as red 
inner join 
(
SELECT v.green_club, count(v.green_club) as gcount 
FROM v_round as v 
GROUP BY v.green_club 
) as green on red.red_club = green.green_club 
+0

虽然我的工作,@布莱恩是更好的解决方案。 – Matt 2014-10-29 20:38:12