[[oktatas:adatbázis-kezelés:sql|< SQL]] ====== SQL Függvények ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2012, 2016, 2021 * Licenc: GNU Free Documentation License 1.3 * Web: https://szit.hu ===== sum() ===== Összegzés SELECT sum(fizetes) AS Osszfizu FROM Szemely; ===== avg() ===== Az avg() függvény átlag számítására való. Szám adatok átlagát kaphatjuk meg vele. SELECT avg(fizetes) AS AtlagFizetes FROM Szemely; ===== format() ===== ==== Dátum ==== SELECT format(szuletes, 'MM-DD') as Szuletes FROM Szemely ; select format(szuletes, "yyyy") from Dolgozok SELECT format(now(), "YYYY") Access hónap, nap és év forma: select format(szuletes, "mmmm dd, yyyy") from Dolgozok Eredménye például: | május 04, 1950 | | november 26, 1974 | | október 18, 1974 | | augusztus 23, 1954 | MySQL hónap, nap és év forma: SELECT date_format(szuletes, "%M %d, %Y") FROM Dolgozok | May 04, 1950 | | November 26, 1974 | | October 18, 1987 | | August 23, 1954 | Access óra, perc napszak: select format(now(), "hh:mm AMPM") Eredménye például: | 12:41 du. | MySQL óra, perc napszak: SELECT date_format(now(), "%H:%i %p") Eredménye például: | 12:56 PM | ==== Hány éves? (MySQL-ben) ==== select year(now()) - year(szuletes) as Életkor from Szemelyek where nev="Archer Vitália" Lehetséges eredmény: 53 Esetleg: SELECT floor(datediff(now(), szuletes )/365.25) AS Életkor FROM Szemelyek WHERE nev="Archer Vitália" Kicsit pontosabban: select from_days(datediff(now(), szuletes )) as Életkor from Szemelyek where nev="Archer Vitália" Lehetséges eredmény: 0052-09-03 Esetleg így: SELECT DATE_FORMAT( FROM_DAYS( DATEDIFF(CURRENT_DATE, szuletes) ), '%y év %m hónap %d nap' ) AS Életkor FROM Szemelyek WHERE nev="Archer Vitália" Lehetséges eredmény: 52 év 09 hónap 03 nap Na meg így: SELECT FLOOR(ABS(DATEDIFF(CURRENT_TIMESTAMP, szuletes))/365.25) AS Életkor FROM Szemelyek WHERE nev="Archer Vitália" Lehetséges eredmény: 52 ==== Hány éves? (Accessben) ==== Esetleg a select után: ... DateDiff("yyyy", szuletes, Now()) ... ==== Szám ==== Csak MySQL-en: select format(35.12345, 3) A kimenet: 35.123 Access: select format(fizetes, "Scientific") from Dolgozok; Accessben lehetséges állandók: * "General Number" * Currency * Fixed * Standard * Percent * Scientific * Yes/No * True/False * On/Off ===== count() ===== Szeretnénk megszámolni bizonyos adatokból hány darab van. Erre használható a count() függvény: select count(az) as Szolnokiak from Szemely where telepules = "Szolnok"; Azonos településneveket csak egyszer számoljunk: select count(distinct telepules) from dolgozok; ===== min()/max() ===== Legkisebb, legnagyobb kiválasztása Szemely tábla felépítése: ^ az ^ nev ^ telepules ^ cim ^ szuletes ^ belepes ^ fizetes ^ diploma ^ | 1 | Nagy József | Szolnok | Tél u. 23. | 1975-08-25 | 2004-03-01 | 570000 | 1 | | 2 | Pék Réka | Miskolc | Árny u. 29. | 1977-02-03 | 2006-04-01 | 389000 | 1 | | 3 | Kis Mária | Debrecen | Vértes u. 20. | 1981-04-01 | 2005-03-27 | 680000 | 1 | | 4 | Érdek Júlia | Szeged | Bíró u. 25. | 1982-03-08 | 2008-09-01 | 190000 | 0 | | 5 | Boros Evelin | Szolnok | Barát u. 78. | 1988-02-22 | 2001-01-01 | 850000 | 0 | | 6 | Lórem Kinga | Szeged | Pilisi út 17. | 1973-08-02 | 2000-01-01 | 878000 | 1 | | 7 | Fix Béla | Szolnok | Burkus u. 80. | 1991-11-05 | 2008-01-01 | 351000 | 1 | Legkorábban jött dolgozó: SELECT min(belepes) FROM `Szemely` Legkésőbb jött dolgozó: SELECT max(belepes) FROM `Szemely` Legkevesebb fizetés: SELECT min(fizetes) FROM `Szemely` Legtöbb fizetés: SELECT max(fizetes) FROM `Szemely` A LIMIT direktíva használata. Legkevesebb fizetés: SELECT fizetes FROM Szemely ORDER BY fizetes LIMIT 1 Legtöbb fizetés: SELECT fizetes FROM Szemely ORDER BY fizetes DESC LIMIT 1 Az Access adatbázis-kezelőkben a SELECT után tett TOP 1 valósítja meg ugyanezt. ===== len()/length() ===== Egy karaktersorozat vagy egy szám hány darab karakterből vagy számjegyből áll: select len(nev) from Dolgozok Ha nem szűrünk, automatikusan rekordonként mutatja. MySQL-ben length: select length(nev) from Dolgozok ===== Dátumok ===== ==== Most ==== select now() ==== Különbség ==== Vonjuk ki egyik dátumból a másikat (Mariadb 10-től): Legyen két dátum mező, belepes és kilepes. Szeretnénk megtudni hány nap telt el a kettő között: select datediff(belepes, kilepes) select datediff('2021-01-15', '2021-03-15'); Az eredmény: -59 Az abs() függvénnyel vehetjük az abszolút értékét. ==== Részek ==== select year(now); select year(szuletes); select month(now); select month(szuletes); select day(now); select day(szuletes); select hour(now); select hour(szuletes); select minute(now); select minute(szuletes); select second(now); select second(szuletes); ===== Számítások csoportokra ===== A következőkben a dolgozókat szeretnénk megszámolni településenként: SELECT count(az) AS "Dolgozok telepulesenkent" FROM Szemely GROUP BY telepules;