我想知道如何从不同的结果中获取公共字符串的出现次数(或在我的查询中使用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);
有可能吗?
答案 0 :(得分:3)
Select Name,
Count(Distinct Rank) as Ranks
from TableName
where Rank=1 or Rank=2
Group By Name
答案 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
这就是你要求的?