Fetching latest headlines…
Osztályközös lekérdezés SQL-lel
NORTH AMERICA
🇺🇸 United StatesApril 19, 2026

Osztályközös lekérdezés SQL-lel

0 views0 likes0 comments
Originally published byDev.to

Ebben a rendkívül rövid blogbejegyzésben arról fogok értekezni, hogyan lehet osztályközös lekérdezést létrehozni SQL nyelven. A példához MsSQL-t használok majd, de mivel az SQL szintaxisok rendkívül hasonlóak, így ezt bármelyik SQL "dialektusban" meg lehet oldani.
Itt is van a rendkívül profán lekérdezés:

SELECT
    amount / 200000 * 200000 AS BinStart,
    amount / 200000 * 200000 + 199999 AS BinEnd,
    COUNT(*) AS Count
FROM Salaries
WHERE end_date IS NULL
GROUP BY
    amount / 200000;

A tábla maga így néz ki:

CREATE TABLE Salaries (
  salary_id int PRIMARY KEY IDENTITY(1, 1),
  employee_id int,
  amount int,
  start_date date,
  end_date date,
  registered datetime DEFAULT (GETDATE())
)

Hogyan működik a lekérdezés?

Az alábbi sor alakítja ki az osztályközöket úgy, hogy az "amount" oszlop értékét osztja, majd megszorozza az osztályköz hosszával:
amount / 200000 * 200000 AS BinStart
Ha belegondolunk, itt nyilván egy egész számot fogunk kapni, ami megmondja, hogy hány egészszer van meg a fizetésben az osztályköz hosszával egyenlő szám. Azért nem szükséges a FLOOR alkalmazása, mert az MS SQL erősen típusos, és integert osztunk integerrel. Ez viszont nem azt jelenti, hogy más adatbázisrendszernél ez így működik. MySQL-ben például szükséges lenne a FLOOR alkalmazása.
Ha az eredményt beszorozzuk az osztályköz hosszával, akkor nyilván n-szer kapjuk meg az annak nagyságát. Az osztályköz felső határát az összeadás biztosítja. A "GROUP BY" művelet segítségével csoportosítunk aszerint, hogy hányszor egészszer van meg a fizetésben az osztályköz hossza.
_A "WHERE end_date IS NULL" azért került oda, mert a táblában az aktuális fizetésnél az "end_date" mező értéke null. _

Comments (0)

Sign in to join the discussion

Be the first to comment!