Autor Zpráva
Sxmanek
Profil
Zdravím, potřeboval bych poradit nebo jen nasměrovat.

Mám dvě tabulky.
1.Pozice (ID, min. Plat, max. Plat)
2.Zaměstnance(ID, pozice,mzda)

A teď bych potřeboval zjistil kolik lidí(POC_MIN) má na dané pozici min. plat.

SELECT z.POZICE_ID AS POZICE, 
       p.MINIMALNI_MZDA AS MIN_MZDA, 
       p.MAXIMALNI_MZDA AS MAX_MZDA, 
       COUNT(*) AS POC_MIN,
       COUNT(*) AS POC_MAX, 
       COUNT(z.POZICE_ID) AS POC_ZAM 
FROM A_HR.ZAMESTNANCI z JOIN A_HR.PRAC_POZICE p ON z.POZICE_ID = p.POZICE_ID 
GROUP BY z.POZICE_ID,p.MINIMALNI_MZDA,p.MAXIMALNI_MZDA ORDER BY z.POZICE_ID ASC;

Zkoušel jsem přes podmínky, že to mělo počítat pouze lidi kde se z.MZDA=p.MINIMALNI_MZDA, ale buď mi to ukáže všude "1" nebo celkový počet lidí na dané pozici.
Kajman
Profil
Zkuste dovnitř agregační funkce sum dát výraz vracející 1 nebo 0 dle toho, zda to je min. plat.

V mysql tedy
sum(p.MINIMALNI_MZDA=z.mzda) as poc_min
Sxmanek
Profil
Takže mám dát COUNT(p.MINIMALNI_MZDA=z.mzda) AS POC_MIN, jinak jsem zapoměl napsat že to je SQL Oracle.
To co sem zde psal, tak nejde, chce to po mě závorku.
Nešlo by to udělat nějak COUNT(CASE WHEN(z.MDZA=p.MINIMALNI_MZDA)........)
Kajman
Profil
Ano přes case by to mělo jít - stačí aby se vrátil null, pokud podmínka není splněná.
Sxmanek
Profil
Tak nakonec toto se ukázalo jako správné řešení COUNT(CASE WHEN z.MZDA=p.MINIMALNI_MZDA THEN 1 ELSE NULL END) AS POC_MIN

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: