Jak obliczyc dwa COUNT w jednym zapytaniu

0
ID SYMBOL NO
1 A 98
2 A 235
3 A 55
4 B 7
5 B 1
6 C 11

Czy da się jakoś w jednym zapytaniu policzyć ile jest
rekordów o symbolu 'B' a ile jest wszystkiego pozostałeg?
Czyli dla symbolu 'A' byłby to wynik:

COUNT_ALL COUNT_SYMBOL
6 3

Dla symbolu 'B' byłby to wynik:

COUNT_ALL COUNT_SYMBOL
6 2

Dla symbolu 'C' byłby to wynik:

COUNT_ALL COUNT_SYMBOL
6 1
0

Hm... podzapytanie?

select * from (select count(1) as Count_ALL from a1),(select count(1) as Count_symbol from a1 where symbol='X');
0
SELECT Count(*) Count_all, Sum(Case When symbol='A' Then 1 Else 0 End) Count_symbol FROM tabela
0

podzapytanie jest powolne musze to chyba w LOOpie zrobic

0

będzie jeszcze wolniejsze. dodaj brakujące indeksy.

0
SELECT COUNT(*) Count_all, SUM(CASE WHEN symbol='A' THEN 1 ELSE 0 END) Count_symbol FROM tabela 

tek kod nie da raczej wyniku poprawnego chyba nie doczytałeś...

Loop do takich obliczeń to jak wbijanie gwoździ młotem pneumatycznym użyj CASE lub połącz zapytania UNION kwestia jak Ci pasuje.

SELECT SUM(CASE WHEN symbol='A' THEN 1 ELSE 0 END),SUM(CASE WHEN symbol='B' THEN 1 ELSE 0 END) , SUM(CASE WHEN symbol='C' THEN 1 ELSE 0 END) FROM tabela 

lub

 Select count(1),'a' from dane where symbol='a' UNION ALL Select count(1),'B' from dane where symbol='b' union all Select count(1),'C' from dane where symbol='c'

1 użytkowników online, w tym zalogowanych: 0, gości: 1