2013-08-01 23 views
0

我不知道我怎么会得到不同的结果相同的字符串的出现次数(或使用或在我的查询,如下面的例子)。MySQL的 - 摆脱“不同”的查询出现的次数导致

表例如:

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

现在,我需要计数的出现次数为秩= 1和秩= 2,但不重复计数。

做这样的事情:

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

结果是

name1 | 1 
name2 | 1 
name3 | 1 

完美的,但现在我需要包括一些其他的结果(即等级= 1个或秩= 2),并获得事件从每个名字,而不复制它。

使用表例子,秩= 1或排名查询例如想要的结果= 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
Select Name, 
     Count(Distinct Rank) as Ranks 
     from TableName 
     where Rank=1 or Rank=2 
     Group By Name 

Sql Fiddle Demo

+0

它缺少一个DISTINC。看起来像是有效的。 (我会做出一些测试 - 谢谢你的好意 PS:你能解释我为什么不能当计数(DISTINCT名工作),但它的工作,当计数(DISTINCT排名) – dmartinez

+0

@dmartinez计数(唯一的名字)!?通过结果和计数(Distinct Rank)计算由ditinct名称在组中计算由ditinct排名 –

+0

+1为最佳答案 – Parado

2

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

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

yeap!当然(这是有道理的)非常感谢你 – dmartinez

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

这是你问什么?从表名 其中评级= 1或秩= 2 组由名字 选择名称, 计数(DISTINCT等级),为秩 :