2013-11-04 39 views
0

假设我有一张名为“比赛”的表格,我在这里保存了来自足球比赛的2支球队。从一组选定的2个统一列中计数实例

------------------------- 
| home_club | away_club | 
------------------------- 
|   |   | 
------------------------- 

而且我有一个返回所有的俱乐部从该表的查询,无论是主场还是客场俱乐部通过UNION:

SELECT home_club AS clubs FROM matches UNION SELECT away_club FROM matches 

现在我有所谓的“俱乐部”一个结果集,我希望来计算每个出现在“匹配”表中的次数。我如何去做这件事?

回答

1

如果你想知道有多少次,每次出现在matches表,那么你需要在子查询中摆脱union的。 union将删除重复项。

这里是你怎么能够让一个计数:

select club, count(*) as NumAppears 
from (SELECT home_club AS club FROM matches 
     UNION ALL 
     SELECT away_club FROM matches 
    ) m 
group by club; 

注意UNION替换UNION ALL

+0

这个作品很棒!谢谢 – Alternatex

1

尝试以下

select sum(count) as Matches, Club from 
(select count(*) as count, home_club as Club from matches group by home_club 
union all 
select count(*) as count, away_club as Club from matches group by away_club) a 
group by a.clubs 
+0

只需要添加一个GROUP BY子句,它的工作原理。谢谢。 – Alternatex

+0

是的,我的意思是,忘了它。 – Tilak

0
SELECT 
    M.clubs, 
    COUNT(M.clubs) [count] 
FROM 
    (
     SELECT 
      home_club AS clubs 
     FROM 
      matches 

     UNION ALL 

     SELECT 
      away_club 
     FROM 
      matches 
    ) M 
GROUP BY 
    M.clubs 
+0

我认为这只会计算他们在“俱乐部”结果集中但不在比赛表中的实例的数量。它所返回的每行都是1s。 – Alternatex

+1

查看是否将'UNION'改为'UNION ALL'(以防止删除重复的俱乐部名称)是否有效。 – StyxUT

相关问题