SQL segítség? Megy a zöld
SQL-ben hogyan kell lekérdezni, hogy kik keresnek kevesebbet mint, xy munkakörének az átlaga?
Adatbázis tábla:dolgozo(név, munkakör, munkábaAllas, fizetés, jutalék, munkakod)
Tegnap mindenhogyan próbáltam de sehogy sem jött össze. Előre is köszi a válaszokat!
Amit #1-es írt nem elég, mivel a kalkulált átlaggal kell összehasonlítanod a fizetés mezőt, ezért subselect kell, ami kiszámolja az átlagot.
Szóval 2 lehetőség van , az egyik kalkulált táblát a select from után berakod, vagy a másik mikor a where részbe egy értéket visszaadó subselect-et hasonlítasz össze az fizetés mezőbe.
SELECT dolgozo.nev, dolgozo.munkakor, dolgozo.fizetes
FROM dolgozo
WHERE dolgozo.fizetes < (
SELECT AVG(dolgozo.fizetes)
FROM dolgozo
WHERE dolgozo.munkakor = 'xy'
)
Egyes SQL szerver/nyelv implementációkban létezhetnek ennél jobb megoldások is, még az is lehet, hogy konkrétan azon az implementáción, amit te használsz, nem fog működni, mert nem lehet alias-olni a táblanevet, de általánosságban kb így néz ki egy ilyen query:
Két kulcsfogalom van a megoldásban.
Az egyik subselect, azaz a zárójelben lévő select, a másik pedig az alias,
tehát a külső select-ben adsz egy alias-t a dolgozo-nak, hogy a subselect-ben hivatkozhass rá.
SELECT d.munkakör, d.név, d.fizetés
FROM dolgozo d
WHERE d.fizetés < (
SELECT avg(dolgozo.fizetés) FROM dolgozo WHERE dolgozo.munkakör = d.munkakör
)
#3-as válasza nem jó, mert 1. WHERE dolgozo.munkakor = 'xy' ez nem fog menni csak úgy, kell a másik táblából az adat, viszont mezőnév ütközés lenne és mivel 2x ugyanarra a táblára nem hivatkozhatsz ugyanazzal a névvel két selectben kell az alias.
#4-est nézd inkább.
Esetleg kellhet az AS kulcsszó
FROM dolgozo AS d
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!