[SQL] count_if
primoh - 15-11-2005 20:13
[SQL] count_if
Witam!
Czy w czystym SQL mozna zasymulowac funkcje count_if? Funkcja taka zlicza tylko te wiersze, ktore spelniaja okreslony warunek.
Na przyklad jest tabela, ktorej dana kolumna przyjmuje m.in. wartosci a,b i c. I ja chcialbym wykonac takie zapytanie (mniej wiecej):
select count(kol) as Razem, count_if(kol=='a') as A, count_if(kol=='b') as B, count_if(kol=='c') as C from tabela;
Czyli chcialbym otrzymac liczebnosc poszczegolnych wartosci.
Najlepiej gdyby dalo sie to wykonac w jednym przebiegu bez podzapytan w stylu: select count(kol) where kol == 'a';
Pozdrawiam
-- "Ewolucja stworzyła człowieka."
Trzypion - 15-11-2005 20:13
On Tue, 15 Nov 2005 16:31:02 +0100, primoh <primoh_wytnij_@gazeta.pl> wrote:
>Na przyklad jest tabela, ktorej dana kolumna przyjmuje m.in. wartosci a,b >i c. I ja chcialbym wykonac takie zapytanie (mniej wiecej): > >select count(kol) as Razem, count_if(kol=='a') as A, count_if(kol=='b') as >B, count_if(kol=='c') as C from tabela; > >Czyli chcialbym otrzymac liczebnosc poszczegolnych wartosci. > >Najlepiej gdyby dalo sie to wykonac w jednym przebiegu bez podzapytan w >stylu: select count(kol) where kol == 'a';
Trzy podzapytania i union? -- ___________ (R) /_ _______ Adam 'Trzypion' Płaszczyca (+48 502) 122 688 ___/ /_ ___ ul. Ludwiki 1 m. 74, 01-226 Warszawa _______/ /_ http://trzypion.oldfield.org.pl/fotk...rterka/II_MPL/ ___________/ GG: 3524356
Marcin Miga - 15-11-2005 20:13
primoh wrote:
> Witam! > > Czy w czystym SQL mozna zasymulowac funkcje count_if? Funkcja taka > zlicza tylko te wiersze, ktore spelniaja okreslony warunek. > > Na przyklad jest tabela, ktorej dana kolumna przyjmuje m.in. wartosci > a,b i c. I ja chcialbym wykonac takie zapytanie (mniej wiecej): > > select count(kol) as Razem, count_if(kol=='a') as A, > count_if(kol=='b') as B, count_if(kol=='c') as C from tabela; > > Czyli chcialbym otrzymac liczebnosc poszczegolnych wartosci. > > Najlepiej gdyby dalo sie to wykonac w jednym przebiegu bez podzapytan > w stylu: select count(kol) where kol == 'a'; >
Cos w ten desen (MS SQL): SELECT Count(*), Count(When kol='a' then 1 else 0 end) as A, Count(When kol='b' then 1 else 0 end) As B FROM Tabela
A czemu nie możesz użyć: SELECT kol, Count(*) FRom Tabela group by kol ??
pozdrawiaMM -- Marcin M. Miga "More matter with less art"
Noel - 15-11-2005 20:13
Użytkownik primoh napisał: > Witam! > > Czy w czystym SQL mozna zasymulowac funkcje count_if? Funkcja taka zlicza > tylko te wiersze, ktore spelniaja okreslony warunek. > > Na przyklad jest tabela, ktorej dana kolumna przyjmuje m.in. wartosci a,b > i c. I ja chcialbym wykonac takie zapytanie (mniej wiecej): > > select count(kol) as Razem, count_if(kol=='a') as A, count_if(kol=='b') as > B, count_if(kol=='c') as C from tabela; > > Czyli chcialbym otrzymac liczebnosc poszczegolnych wartosci. > > Najlepiej gdyby dalo sie to wykonac w jednym przebiegu bez podzapytan w > stylu: select count(kol) where kol == 'a'; > > Pozdrawiam > [Oracle]
1. Funkcja DECODE
SELECT COUNT(*) Razem, COUNT(DECODE(kol,'a',1,NULL)) A, COUNT(DECODE(kol,'b',1,NULL)) B, COUNT(DECODE(kol,'c',1,NULL)) C FROM Tabela;
2. CASE - od wersji 9.x bazy
SELECT COUNT(*) Razem, COUNT((CASE WHEN (kol='a') THEN 'a' END)) A, COUNT((CASE WHEN (kol='b') THEN b' END)) B, COUNT((CASE WHEN (kol='c') THEN 'c' END)) C FROM Tabela;
-- Tomek "Noel" B.
Sergiusz Rozanski - 15-11-2005 20:13
Dnia 15.11.2005 Marcin Miga <Marcin.Miga> napisał/a: > primoh wrote: > >> Witam! >> >> Czy w czystym SQL mozna zasymulowac funkcje count_if? Funkcja taka >> zlicza tylko te wiersze, ktore spelniaja okreslony warunek. >> >> Na przyklad jest tabela, ktorej dana kolumna przyjmuje m.in. wartosci >> a,b i c. I ja chcialbym wykonac takie zapytanie (mniej wiecej): >> >> select count(kol) as Razem, count_if(kol=='a') as A, >> count_if(kol=='b') as B, count_if(kol=='c') as C from tabela; >> >> Czyli chcialbym otrzymac liczebnosc poszczegolnych wartosci. >> >> Najlepiej gdyby dalo sie to wykonac w jednym przebiegu bez podzapytan >> w stylu: select count(kol) where kol == 'a'; >> > > Cos w ten desen (MS SQL): > SELECT Count(*), Count(When kol='a' then 1 else 0 end) as A, Count(When > kol='b' then 1 else 0 end) As B FROM Tabela
a tu jako agregacja warunków nie powinna być sum() ? bo dla count czy 1 czy 0 to wiersz jest i go doda ;) (chyba, nie próbowałem z count, zawsze wciskałem w takie coś sum)
-- *** rozanski.at.sergiusz.dot.com sq3bkn *** *** http://jeep.comm.pl *** *** rtg project http://gg.overwap.net ***
primoh - 15-11-2005 20:13
Wlasnie podrozowalem sobie przez Kornwalie... kiedy nagle primoh napisal:
> Witam! > > Czy w czystym SQL mozna zasymulowac funkcje count_if? Funkcja taka > zlicza tylko te wiersze, ktore spelniaja okreslony warunek. > > Na przyklad jest tabela, ktorej dana kolumna przyjmuje m.in. wartosci > a,b i c. I ja chcialbym wykonac takie zapytanie (mniej wiecej): > > select count(kol) as Razem, count_if(kol=='a') as A, count_if(kol=='b') > as B, count_if(kol=='c') as C from tabela; > > Czyli chcialbym otrzymac liczebnosc poszczegolnych wartosci. > > Najlepiej gdyby dalo sie to wykonac w jednym przebiegu bez podzapytan w > stylu: select count(kol) where kol == 'a';
Dzieki wszystkim za odpowiedzi. Poradzilem sobie za pomoca funkcji nullif().
Pozdrawiam
-- "Ewolucja stworzyła człowieka."
Paweł Matejski - 15-11-2005 20:13
Sergiusz Rozanski wrote: > Dnia 15.11.2005 Marcin Miga <Marcin.Miga> napisał/a: > >>primoh wrote: >> >> >>>Witam! >>> >>>Czy w czystym SQL mozna zasymulowac funkcje count_if? Funkcja taka >>>zlicza tylko te wiersze, ktore spelniaja okreslony warunek. >>> >>>Na przyklad jest tabela, ktorej dana kolumna przyjmuje m.in. wartosci >>>a,b i c. I ja chcialbym wykonac takie zapytanie (mniej wiecej): >>> >>>select count(kol) as Razem, count_if(kol=='a') as A, >>>count_if(kol=='b') as B, count_if(kol=='c') as C from tabela; >>> >>>Czyli chcialbym otrzymac liczebnosc poszczegolnych wartosci. >>> >>>Najlepiej gdyby dalo sie to wykonac w jednym przebiegu bez podzapytan >>>w stylu: select count(kol) where kol == 'a'; >>> >> >>Cos w ten desen (MS SQL): >>SELECT Count(*), Count(When kol='a' then 1 else 0 end) as A, Count(When >>kol='b' then 1 else 0 end) As B FROM Tabela > > > a tu jako agregacja warunków nie powinna być sum() ? > bo dla count czy 1 czy 0 to wiersz jest i go doda ;) (chyba, nie próbowałem > z count, zawsze wciskałem w takie coś sum)
Zamiast 0 można zwracać null i wtedy count zadziała.
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.plmorebeer.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|