Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z GROUP BY i COUNT()
Forum PHP.pl > Forum > Bazy danych > Oracle
derluk
Witam!

Mam problem takiej oto tresci, musze napisac zdanie sql zliczajace ilosc krotek w kazdej podgrupie. Czy ktos moglby mi pomoc w tym? Nakierowac czy cos w tym stylu...

select A, B, C
from T1
group by A, B, C

np w takim przykladzie musze wyswietlic dodatkowo licznosc kazdego ze zbiorow - A, B, C
Bede wdzieczny za kazda wskazowke.

Pozdrowka
spryciula
podaj przykład tabeli i danych tam zawartych

może tak
  1. SELECT podgrupa, count(korekty)
  2. FROM t1 GROUP
  3. BY podgrupa
derluk
tak jak podales dzialaloby dobrze dla 1 podgrupy, a chodzi o to aby zliczalo wszystkie podgrupy dane po select'cie.

Table ma taka postac:

create table Zawodnicy
(
NrZawodnika int,
Imie varchar(15) not null,
Nazwisko varchar(25) not null,
Plec varchar(1) not null,
check (upper(Plec) = 'M' or upper(Plec) = 'K'),
RokUrodzenia int not null,
NrKategorii int not null,
NrKlubu int not null,
Primary Key (NrZawodnika),
Foreign Key NrKlubu
References Kluby(NrKlubu),
Foreign Key NrKategorii
References Kategorie(NrKategorii)

);
dane zawarte w tabeli sa mniej istotne, ale np chcialbym dajac takie zapytanie:

select NrKategorii, count(NrKategorii), NrKlubu, count(NrKlubu)
from Zawodnicy
group by NrKategorii, NrKlubu

(Te zapytanie jest niepoprawne)

otrzymac ilosc krotek zawierajacych ten sam numer kategorii oraz liczbe krotek zawierajacych ten sam numer klubu.
Rozpisujac to na dwa zapytania jest to trywialne caly problem polega na tym jak zrobic to na jednym zdaniu... (???) : )
spryciula
zgaduje, czy o to ci chodziło, chcesz w jednym zapytaniu wywalić ile jest klubów i ile kategorii


więc może o to ci chodzi

  1. SELECT xxx.nrklubu, xxx.licznik_klubu, z.nrkategorii, count(z.nrkategorii) licznik_kategorii
  2. FROM (SELECT nrklubu, count(nrklubu) licznik_klubu
  3. FROM zawodnicy GROUP BY nrklubu)xxx INNER JOIN zawodnicy z
  4. WHERE xxx.nrklubu = z.nrklubu
  5. GROUP BY nrkategorii
derluk
Niestety nie dziala to tak jak powinno. Dobrze zgadles ze chce podac w jednym zapytaniu liczbe klubow i kategorii.
Musialem Twoje zapytanie troszke zmodyfikowac aby w ogole sie ruszylo, do nastepujacej formy:
  1. SELECT xxx.nrklubu, xxx.licznik_klubu, z.nrkategorii, count(z.nrkategorii) licznik_kategorii
  2. FROM (SELECT nrklubu, count(nrklubu) licznik_klubu
  3. FROM zawodnicy GROUP BY nrklubu) xxx INNER JOIN zawodnicy z ON xxx.nrklubu = z.nrklubu
  4. GROUP BY nrkategorii, xxx.nrklubu, licznik_klubu
  5. ORDER BY 1

a wynik otrzymany byl nastepujacy:



Jak widac wyswietla wiele razy nrklubu = 1 , chodzi o to by pokazal ten numer raz i obok jego licznosc, to samo jest z nrkategorii, probowalem... Glowa mała : )
spryciula
wyświetla ci kilka razy ten sam numer klubu, ponieważ masz kilka kategorii, przypisanych do tego samego klubu, inaczej się nie da, zrobić zapytaniem sql'owym,
tak jak ty chcesz to zrobić, możesz tylko zrobić w pl/sql'u, robisz dwa kursory, jednym wyciągasz numer klubu i jego liczebność a drugim kursorem, po numerze klubu wyciągasz ilość kategorii i ich liczebność, a potem w programie(po begin) wyświetlasz, coś takiego


zobacz obrazek
i tak dalej
derluk
Nie wiem, nie wiem smile.gif bede probowac stworzyc jeszcze jakies kombinacje. Niemniej jednak dziekuje bardzo za poswiecony czas i pomoc.
Pozdrawiam
nestor100
Może taki myk pomoże:

Select A||' - '||Count(*) kod_ilosc from T1 group by A
UNION
Select B||' - '||Count(*) kod_ilosc from T1 group by B
UNION
Select C||' - '||Count(*) kod_ilosc from T1 group by C



Bogdan Kaczmarek
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.