2010-04-27 91 views
1

當我添加所示行此查詢失敗,簡單的mysql組需要...幫助通過查詢

Select Companyid, count(*) as cnt 
from mytable 
where State is not null 
and cnt = 1 <------------------------- FAIL 
group by CompanyID 

沒有辦法做到這一點?

這裏有一個長篇大論的背景,如果它會幫助....

我有一個單一的表查詢。

這裏的表的樣本:

CompanyID, State 
1,OH 
1,IL 
1,NY 
2,IL 
3,NY 
3,OH 
4,NY 
5,CA 
5,WA 

我想查詢將返回是這樣的:

2,IL 
4,NY 

我有這個迄今爲止

Select Companyid, count(*) as cnt 
from mytable 
where State is not null 
group by CompanyID 

這給我每個公司的記錄數量。

IE:

1,3 
2,1 
3,2 
4,1 
5,2 

現在我想篩選上面的列表只是兩個記錄有一個結果。

我嘗試添加另一where子句,但它失敗:

Select Companyid, count(*) as cnt 
from mytable 
where State is not null 
and cnt = 1 <-------------------- FAIL 
group by CompanyID 
+0

你不能在「其中」子句中使用聚合函數的結果。在檢索erow的時候應用了WHERE。但就此而言,「計數」的結果尚不可用。這就是'HAVING'起作用的地方,就像'where'一樣,但是在返回結果之前將其作爲查詢的最後階段。 – 2010-04-27 15:17:10

回答

3

可以使用Having -clause限制在你Group By僅發生一次記錄:

Select companyId, state 
From mytable 
Where state Is Not Null 
Group By companyId 
Having Count(*) = 1 
1

CNT是一個總值。因此它在HAVING條款中,而不是WHERE條款。

Select Companyid, count(*) as cnt 
from mytable 
where State is not null 
group by CompanyID 
HAVING count(*)=1;