2011-01-12 9 views
5

OK, Oto co mój stół wyglądaZapytań SQL, aby uzyskać całkowitą sumę wierszy i wiersze pasujące szczególny warunek

------------------------------------------------ 
id      type 
----------------------------------------------- 
1      a 
2      b 
3      a 
4      c 
5      c 
7      a 
8      a 
------------------------------------------------ 

Teraz muszę zapytać, który może dać mi tę moc ...

----------------------------------------------------------------- 
count(*) | count(type=a) | count(type=b) | count(type=c) 
----------------------------------------------------------------- 
8     4     1    3 
------------------------------------------------------------------ 

wiem tylko, aby uzyskać całkowitą zestawu przy użyciu count (*), ale jak to zrobić pozostałe

Odpowiedz

5
SELECT 
COUNT(*), 
COUNT(CASE WHEN type='a' THEN 1 END) as count_a, 
COUNT(CASE WHEN type='b' THEN 1 END) as count_b, 
COUNT(CASE WHEN type='c' THEN 1 END) as count_c, 
FROM table1; 

//or you can do 
SELECT type, COUNT(*) 
FROM table1 
GROUP BY type WITH ROLLUP 

W tym drugim przypadku otrzymasz wyniki:

a | 4
b | 1
c | 3
null | 8

+0

co jest 'THEN 1 END' DLA – mrN

+0

argumentem' count'. 'COUNT' zwraca całkowitą liczbę nie-zerowych argumentów. A "CASE" ma domyślny "ELSE NULL". – a1ex07

0
select count(*),type 
from [TableName] 
Group By Type 
+0

to daje mi wiersze poziome – mrN

1

Można spróbować czegoś podobnego

SELECT COUNT(*) Total, 
     SUM(CASE WHEN type='a' THEN 1 ELSE 0 END) as CountOfA, 
     SUM(CASE WHEN type='b' THEN 1 ELSE 0 END) as CountOfB, 
     SUM(CASE WHEN type='c' THEN 1 ELSE 0 END) as CountOfC, 
FROM Table 
Powiązane problemy