[[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;