2013-04-18 92 views
3

獲取計數假設我有一個表states如下:兩個不同的條件

create table states (id int4 unique not null, state int4 not null); 

我想在其狀態爲1,表中的行數,並在表中的行數其狀態2.兩個單獨的查詢這樣做很簡單:

select count(*) from states where state = 1; 
select count(*) from states where state = 2; 

但似乎很傻要經過整個表的兩倍。有人能想到一些聰明的伎倆,讓我能夠在一個聲明中獲得相同的信息,並且只通過一次表格嗎?

回答

5
select 
    count((state = 1)::integer or null) state_1, 
    count((state = 2)::integer or null) state_2 
from states 

select 
    sum((state = 1)::integer) state_1, 
    sum((state = 2)::integer) state_2 
from states 
+0

我結束了使用你的第二個例子,謝謝! –

5

可以使用CASE與聚合函數:

select 
    sum(case when state=1 then 1 else 0 end) State1, 
    sum(case when state=2 then 1 else 0 end) State2 
from states 
1
SELECT [state], COUNT(*) TotalRows 
FROM [Expense].[dbo].[state] 
GROUP BY [state] 

假設您正在使用SQL Server

+0

只有在您想過濾分組記錄的記錄時才能使用having子句。 – Tamoor

+0

我們可以使用where子句所有其他列likeSELECT [狀態],COUNT(*)TotalRows FROM [費用] [DBO]。[狀態] WHERE [狀態] = 1 GROUP BY [狀態] – Tamoor

+0

查詢1 SELECT [狀態] COUNT(*)總行數 FROM [狀態] GROUP BY [狀態]查詢2 SELECT [狀態],COUNT(*)總行數 FROM [state] WHERE [state] = 1 GROUP BY [state] – Tamoor

1
select count(*) from states group by state having state = 1 or state=2; 

使用SQL組通過

+0

你的意思是'state = 1 OR state = 2' –

+0

而'where'出現在'group by'組之前' –

+0

你不能使用,而state = 1和state = 2結果當然是null – linzilan

相關問題