0

我想知道如何从不同的结果中获取公共字符串的出现次数(或在我的查询中使用 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 或 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);

可能吗?

4

3 回答 3

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

Sql 小提琴演示

于 2013-08-01T18:40:37.677 回答
2

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

SELECT name, COUNT(DISTINCT rank) name_num
FROM table
WHERE rank in (1, 2)
GROUP BY name
于 2013-08-01T18:41:28.307 回答
1
Select Name,
       Count(distinct Rank) as Ranks  
       from TableName
       where Rank=1 or Rank=2 
       Group By Name

这是你要求的?

于 2013-08-01T18:41:57.810 回答