Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Count, inner join

[es] :: Baze podataka :: Count, inner join

[ Pregleda: 5008 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Kusur
Grafički dizajner
Beograd

Član broj: 2485
Poruke: 208
*.9.EUnet.yu



Profil

icon Count, inner join29.07.2003. u 13:25 - pre 209 meseci
Pozdrav svima

Muči me ovaj sql upit. Brojim koliko ima knjiga u svakoj oblasti.
Kako da prikažem i one oblasti koje nemaju knjige,
tj. da se prikaže i oblast i "nula" pored?

Da li neko može da mi pomogne?

SELECT DISTINCTROW oblasti.Oblast_ID, oblasti.Oblast_Ime, count(*) as broj
FROM oblasti inner join knjige on oblasti.Oblast_ID = knjige.Oblast_ID
GROUP BY oblasti.Oblast_ID

Unapred hvala
Kusur
 
Odgovor na temu

Nub.Saibot
Srbija/BG

Član broj: 11838
Poruke: 99
*.direcpceu.com



Profil

icon Re: Count, inner join29.07.2003. u 13:54 - pre 209 meseci
Probaj ovako:

SELECT DISTINCTROW oblasti.Oblast_ID, oblasti.Oblast_Ime, count(*) as broj
FROM oblasti
RIGHT OUTER JOIN knjige on oblasti.Oblast_ID = knjige.Oblast_ID
GROUP BY oblasti.Oblast_ID

Pozdrav
 
Odgovor na temu

Kusur
Grafički dizajner
Beograd

Član broj: 2485
Poruke: 208
*.38.EUnet.yu



Profil

icon Re: Count, inner join29.07.2003. u 18:09 - pre 209 meseci
Dobijam isti rezultat, oblasti kod kojih je broj knjiga "0" se ne prikazuju.
Kusur
 
Odgovor na temu

Kusur
Grafički dizajner
Beograd

Član broj: 2485
Poruke: 208
*.28.EUnet.yu



Profil

icon Re: Count, inner join29.07.2003. u 19:28 - pre 209 meseci
Rešio sam problem (treba gledati i druge diskusije :) )

Verovatno može i jednostavnije, ali ja sam rešio ovako:

SELECT DISTINCTROW oblasti.Oblast_ID, oblasti.Oblast_Ime,
count(oblasti.Oblast_ID = knjige.Oblast_ID) as broj
FROM oblasti left join knjige on oblasti.Oblast_ID = knjige.Oblast_ID
GROUP BY oblasti.Oblast_ID, oblasti.Oblast_Ime
ORDER BY Oblast_Ime

Izlista sve postojeće oblasti i izbroji broj knjiga u svakoj (uključujući i one sa "nula" knjiga)

Pozdrav
Kusur
 
Odgovor na temu

Last Man Standing
Misha Kostich
Chicago

Član broj: 3775
Poruke: 101
*.client.attbi.com



+1 Profil

icon Re: Count, inner join30.07.2003. u 03:13 - pre 209 meseci
Citat:
Nub.Saibot:
Probaj ovako:

SELECT DISTINCTROW oblasti.Oblast_ID, oblasti.Oblast_Ime, count(*) as broj
FROM oblasti
RIGHT OUTER JOIN knjige on oblasti.Oblast_ID = knjige.Oblast_ID
GROUP BY oblasti.Oblast_ID

Pozdrav


Odakle ti samo ta hrabrost :)

1. Sta ce ti distinctrow?
2. count(*) daje pogresne rezultate u ovom slucaju cak i da je join OK
3. UVEK proveri da li u Group By imas sve kolone iz select-a (gore nedostaje ime oblasti)
4. Tabele su pomesane iliti join je obrnut. Kada imas dve tabele i hoces da iz tabele A dobijes sve redove, cak i ako ne postoje odgovarajuci u tablei B, pise se: From A LEFT OUTER JOIN B on ... Lako je da zapamtis, LEFT/RIGHT ti kaze na kojoj je strani tabela iz koje hoces SVE redove. Znaci mozes da koristis i RIGHT join, samo okreni tabele:

Evo onog sto se trazi:

Tabela A: id, name (id je key)
Tabela B: id, ... (id je foreign key iz A)

select A.name, count(B.id)
from A LEFT outer join B on a.id = b.id
group by A.name

Isto to:

select A.name, count(B.id)
from B RIGHT outer join A on b.id = a.id
group by A.name

count(nesto) daje broj redova u kome "nesto" nije null. Posto iz B dobijes null za id ako istog nema, broj redova ce biti 0. Distinct mozes da stavis u count ako hoces broj razlcitih vrednosti.

A computer once beat me at chess, but it was no match for me at kick boxing.
 
Odgovor na temu

Nub.Saibot
Srbija/BG

Član broj: 11838
Poruke: 99
*.direcpceu.com



Profil

icon Re: Count, inner join30.07.2003. u 10:28 - pre 209 meseci
Kada sam video Kusur-ov upit i opis problema samo sam prepravio JOIN deo da bih ga naveo na pravi put. (A najverovatnije je da sam ga zbunio kada je video da upit ne radi :))

Glavno je da pravi odgovor stigao


Pozdrav

P.S. Tek sad kada bolje pogledam taj upit vidim kakva je nebuloza :))
 
Odgovor na temu

Kusur
Grafički dizajner
Beograd

Član broj: 2485
Poruke: 208
*.10.EUnet.yu



Profil

icon Re: Count, inner join30.07.2003. u 10:52 - pre 209 meseci
A šta se dešava sa mojim "rešenjem" – LEFT JOIN ,
da li je "ispravan" to jest, da li prikazuje ispravne rezultate - meni se čini da je OK.
Koji su vaši komentari? Prvi put sam zaboravio, GROUP BY Oblast_Ime, koja postoji na mojoj "mašini".

SELECT DISTINCTROW oblasti.Oblast_ID, oblasti.Oblast_Ime, count(oblasti.Oblast_ID = knjige.Oblast_ID) as broj
FROM oblasti left join knjige on oblasti.Oblast_ID = knjige.Oblast_ID
GROUP BY oblasti.Oblast_ID, oblasti.Oblast_Ime
ORDER BY Oblast_Ime


Kusur
 
Odgovor na temu

Last Man Standing
Misha Kostich
Chicago

Član broj: 3775
Poruke: 101
*.client.attbi.com



+1 Profil

icon Re: Count, inner join31.07.2003. u 02:35 - pre 209 meseci
Ako radi, onda OK.

Mozes da izbacis ono sto je suvisno: distinctrow i umesto count(oblasti.Oblast_ID = knjige.Oblast_ID) stavi count(knjige.Oblast_ID).


A computer once beat me at chess, but it was no match for me at kick boxing.
 
Odgovor na temu

[es] :: Baze podataka :: Count, inner join

[ Pregleda: 5008 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.