ďťż
 
[SQL] count_if ďťż
 
[SQL] count_if
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • morebeer.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com