Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z zadaniem w sql
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
szu997
Witam,
na zajęciach przerabiamy sql-a, a dokładniej "pobieranie danych z bazy" - mamy dbvisualizera i ćwiczymy selecty.
Nadszedł czas napisania sprawozdania i pojawił się duży problem z jednym zadaniem.

Treść brzmi mniej więcej tak "Grupujac podaj liczbę osób znających 1, 2, 3, języki."


Ja doszedłem do czegoś takiego, ale nie jest to poprawne rozwiązanie gdyż podaje klos (klucz osoby) i ilość znanych języków.
Kod
                                         select o.klos, count(z.klos) from osoby as o
                                              join znajezyki as z on o.klos=z.klos
                                              where z.klos in
                                              (select klos from znajezyki)
                                              group by o.klos having count(z.klos)>=1 and count(z.klos)<=3
                                              order by o.klos


Jak to przerobić, abym otrzymał jednowierszową tabelę wyglądającą mniej więcej tak:
Kod
                           |liczba os znaj. 1 język|liczba os znaj. 2 język|liczba os znaj. 3 język|




A to fragment bazy
rambo77
jakbys chociaz pokazla tak delikatnie zawrtosc tabel to zapytanie by bylo proste...
jak mozesz to daj po 2 rekordy z kazdej tabeli, interesuje mnie osoby, jezyk i zna jezyki.
michalg
Witam,

Na szybko napisane, ale spróbuj tak (wewnętrzna część to Twój select trochę obcięty)

  1. SELECT
  2.  
  3. SUM(CASE WHEN a.ile = 1 THEN 1 ELSE 0 END) AS ile1,
  4. SUM(CASE WHEN a.ile = 2 THEN 1 ELSE 0 END) AS ile2,
  5. SUM(CASE WHEN a.ile = 3 THEN 1 ELSE 0 END) AS ile3
  6.  
  7. FROM ( SELECT o.klos, count(z.klos) AS ile FROM osoby AS o
  8. JOIN znajezyki AS z ON o.klos=z.klos
  9. GROUP BY o.klos HAVING count(z.klos)>=1 AND count(z.klos)<=3
  10. ) AS a
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.