Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z zadaniem w sql
szu997
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 14.11.2008

Ostrzeżenie: (0%)
-----


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
(IMG:http://img369.imageshack.us/img369/51/bazagw7.jpg)

Ten post edytował szu997 14.11.2008, 13:52:34
Go to the top of the page
+Quote Post
rambo77
post
Post #2





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 16.11.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
michalg
post
Post #3





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 21:12