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 nagyon hasonlĂłak, Ăgy ezt bármelyik SQL dialektusban meg lehet oldani.
Itt is van a mérhetetlenül egyszerű 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 MSSQL 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.













