mysql - 从“不同”查询结果中获取出现次数

时间:2013-08-01 18:36:02

标签: mysql sql

我想知道如何从不同的结果中获取公共字符串的出现次数(或在我的查询中使用OR,如下例所示)。

表示例:

id | name | rank 
1 | name1 | 1
2 | name1 | 1
3 | name2 | 1
4 | name3 | 1
5 | name1 | 2
6 | name1 | 2
7 | name3 | 2

现在,我需要计算rank = 1和rank = 2的出现次数,而不重复计数。

做这样的事情:

SELECT  name, COUNT(DISTINCT name) 
AS name_num FROM table WHERE rank = 1 GROUP BY name;

结果是

name1 | 1
name2 | 1
name3 | 1

完美,但现在我需要包含一些其他结果(即rank = 1 OR rank = 2)并从每个名称中获取事件,而不重复它。

使用表示例和rank = 1 OR rank = 2的查询示例的结果应该是:

name1 | 2
name2 | 1
name3 | 2

我会尝试解释我想要的结果:

name1 is present when rank = 1 (+1) and when rank=2 (+1);
name 2 is only present when rank=1
name3 is present when rank = 1 (+1) and when rank=2 (+1);

有可能吗?

3 个答案:

答案 0 :(得分:3)

Select Name,
       Count(Distinct Rank) as Ranks  
       from TableName
       where Rank=1 or Rank=2 
       Group By Name

Sql Fiddle Demo

答案 1 :(得分:2)

您需要COUNT(DISTINCT rank),而不是COUNT(DISTINCT name)。由于您按名称进行分组,因此每个组中只有一个不同的名称。

SELECT name, COUNT(DISTINCT rank) name_num
FROM table
WHERE rank in (1, 2)
GROUP BY name

答案 2 :(得分:1)

Select Name,
       Count(distinct Rank) as Ranks  
       from TableName
       where Rank=1 or Rank=2 
       Group By Name

这就是你要求的?