SQL计算值在多列中出现的次数?

时间:2013-04-30 12:22:26

标签: mysql sql

我在mysql数据库中有两列,我想计算两个列中出现一个名称的次数。 COUNT函数本身对我不起作用,因为它只计算一列中的总数。

MySql列:

+-----------------+--------------+
| Member1         | Member2      |
+-----------------+--------------+
| John            | Bill         | 
| Bill            | John         |
| Joe             | John         |
| Bill            | Joe          |
| John            | Steve        |
+-----------------+--------------+

期望的输出:

+-----------------+--------------+
| Member          |     Total    |
+-----------------+--------------+
| John            | 4            | 
| Bill            | 3            |
| Joe             | 2            |
| Steve           | 1            |
+-----------------+--------------+

任何想法?谢谢!

2 个答案:

答案 0 :(得分:10)

您可以使用以下内容,使用UNION ALL将多列成员展开到一个列中。一旦它在单列中,您就可以应用聚合函数count

select member, count(*) Total
from 
(
  select member1 as member
  from yt
  union all
  select member2
  from yt
) d
group by member
order by total desc;

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

如果单个名称出现在1列2次以上,则上面的sql结果将是错误的。 在子查询中使用“distinct”语句尝试它。