Ipak bih zamolio da se tema ne brise jer sada kad sam skoro sve napravio ostaje mi jedan problemcic.
Naime, imam bazu podataka sa tri tablice:
odjel, radno_mjesto i zaposlenici.
U tablici odjel imamo 4 odjela i u toj tablici imamo id_odjela, ime_odjela i id_voditelja. Ako mi netko moze pomoci kako da izracunam prosjecne place svih voditelja odjela. Znam da je nesto sa INNER JOIN jer su iznosi placa uneseni u tablicu zaposlenici. Ako treba postavim dump baze ovdje ili negdje online.
Hvala unaprijed na svakoj pomoci!
P. S. Znam da ovdje ima velemajstora kad je u pitanju SQL
Evo probao sam ovo, ali javlja error:
SQL query: Documentation
SELECT SUM(z.placa) / (SELECT COUNT(*) FROM odjel)
FROM zaposlenici z, odjel o
LEFT JOIN z.id_zaposlenik = o.id_voditelj LIMIT 0, 25
MySQL said: Documentation #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘= o.id_voditelj LIMIT 0, 25’ at line 3
AVG je funkcija koju tražiš.
Isto, bolje bi bilo da id_voditelja prebaciš u flag polje pivot table tako da ti department entity ostane čist od nepotrebnih polja. Ovako kako radiš uvodiš u igru dodatnu relaciju i povećavaš kompleksnost a da ništa ne dobijaš time.
Recimo da bi pivot tabela trebala da ima dodatno nullable tinyint field voditelj default 0.
Nadalje, kako se kompleksnost te relacije bude povećavala, možeš tu komplestnost dodatnih polja (zajedno sa voditelj flag-om) da prebaciš u attribute table koju takodje identifier-om njenog unosa awesome_attributes.id povezuješ sa pivot tabelom. Naravno ovo nije neophodno i ako nemaš takvu potrebu (obično je potreba ako se mora praviti relacija te tabele atributa sa nekim petim tabelama) sva ta polja i dalje mogu biti u pivot tabeli.
Ovo navedeno:
SELECT SUM(z.placa) / (SELECT COUNT(*) FROM odjel)
FROM zaposlenici z, odjel o
WHERE z.id_zaposlenika = o.id_voditelja
nije potpuno. Naime, potrebno je prikazati sve voditelje odjela i izračunati prosjek njihovih plaća. Ja sa ovim upitom dobijem samo ispis prosjeka plaća. Trebalo bi da na ekranu pišu imena i prezimena voditelja odjela, iznos plaće za svakog voditelja te prosjek plaća za voditelje odjela.
Ne razumijem te, opet
Sto da dodam u ovaj upit?
SELECT SUM(z.placa) / (SELECT COUNT(*) FROM odjel)
FROM zaposlenici z, odjel o
WHERE z.id_zaposlenika = o.id_voditelja
#1140 - In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column ‘tvrtka.z.ime’; this is incompatible with sql_mode=only_full_group_by
SELECT zaposlenici.ime, zaposlenici.prezime, zapeslenici.placa, SUM(zaposlenici.placa / (SELECT COUNT(*) FROM odjel)) as prosjek
FROM odjel
JOIN zaposlenici
WHERE odjel.id_voditelja = zaposlenici.id_zaposlenika;
#1140 - In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column ‘tvrtka.zaposlenici.ime’; this is incompatible with sql_mode=only_full_group_by