Autor | Zpráva | ||
---|---|---|---|
Sxmanek Profil |
#1 · Zasláno: 15. 4. 2014, 13:58:09
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 |
#2 · Zasláno: 15. 4. 2014, 15:06:29
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 |
#4 · Zasláno: 15. 4. 2014, 20:21:43
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
|
||
Časová prodleva: 10 let
|
0