Trebam pomoc hitno! SQL problemcic

Pozdrav kolege!

Da li mi netko moze pomoci sa slijedecim:

CREATE TABLE `radno_mjesto` (
  `id_zaposlenika` int(11) NOT NULL,
  `id_odjela` int(11) NOT NULL,
  KEY `fk_emp_works` (`id_zaposlenika`),
  KEY `fk_dept_works` (`id_odjela`),
  CONSTRAINT `fk_dept_works` FOREIGN KEY (`id_odjela`) REFERENCES `odjel` (`id_odjela`),
  CONSTRAINT `fk_emp_works` FOREIGN KEY (`id_zaposlenika`) REFERENCES `zaposlenici` (`id_zaposlenika`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Sto bi ovdje bilo najbolje staviti umjesto fk_emp_works i fk_dept_works? Zelim da to bude na hrvatskom jeziku.

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 :smiley:

Mozes postaviti tablice vamo, mogu ti ja pomoci

Jel da stavim cijeli database dump?

Mozete samo describe tablica staviti

Sta je describe,nemam pojma?

Sumiraš sve plaće voditelja i podijeliš s brojem voditelja.

Ovak, nabrzaka:

SELECT SUM(z.placa) / (SELECT COUNT(*) FROM odjel)
FROM zaposlenici z, odjel o
WHERE z.id_zaposlenik = o.id_voditelj

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

Nije left join nego WHERE, probaj.

Upalilo je s ovim:

SELECT SUM(z.placa) / (SELECT COUNT(*) FROM odjel)
FROM zaposlenici z, odjel o
WHERE z.id_zaposlenika = o.id_voditelja

Hvala puno!

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.

Je l’ ovo jedna te ista cifra il’ ima neka dodatna logika?

Ne razumijem te bas… Znaci postoje voditelji odjela koji imaju odredjenu placu. Trebamo prikazati iznose placa i prosjek. Znaci nesto ovako:
primjerprosjek

Pa to - jedna je cifra prosjeka svih voditelja.
Tj. svaki red će imati istu cifru prosjeka.

..., z.Ime, z.Prezime 
FROM...

Ne razumijem te, opet :slight_smile:
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

..., z.Ime, z.Prezime 
FROM...
SELECT SUM(z.placa) / (SELECT COUNT(*) FROM odjel), z.Ime, z.Prezime
FROM zaposlenici z, odjel o
WHERE z.id_zaposlenika = o.id_voditelja

Kaze ovako:

#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

Probaj ovo

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;

Opet isti error:

#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