Oracle Database — SQL Temelleri 6 — Grup Fonksiyonları
Merhabalar,
Bu yazımda Oracle SQL’de grup fonksiyonlarını anlatacağım. Bu fonksiyonlar Avg(ortalama), Count(sayma), Max(maximum), Min(minimum), Sum(toplam)’dır.
Grup Fonksiyonları
Grup fonksiyonları Syntax:
SELECT group_function(column), ...
FROM table
[WHERE condition]
[ORDER BY column];
Örnek:
SELECT AVG(salary), MAX(salary),
MIN(salary), SUM(salary)
FROM employees
WHERE job_id LIKE '%PROG%';
Gördüğünüz gibi job_id’si içinde PROG geçenlerin ortalama,maksimum,minimum, ve toplam maaşlarını sorgulamış olduk.
Count Fonksiyonu: Tablodaki satır sayısını verir.
SELECT COUNT(*)
FROM employees
WHERE department_id = 50;
departman id’si 50 olan kayıtların toplam sayısını sorguladık.
Grup Fonksiyonları ve Boş Değerler:
SELECT AVG(commission_pct)
FROM employees;
--SONUC: 0.2228571428571428571428571428571428571429
--HATALIDIR ÇÜNKÜ ARADA NULL DEĞERLER VARDIR.SELECT AVG(NVL(commission_pct, 0))
FROM employees;
bu sorguda null değerleri çıkarttık ve sonuç:
Satırları Gruplanması
GROUP BY: SQL cümlelerinde veriler gruplanmasını istediğimiz group by ifadesi ile belirtiriz.
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;
bu sorguda departman id ile maaş ortalaması aldık.
Çoklu Sütunlar için Gruplandırma:
SELECT department_id, job_id, SUM(salary)
FROM employees
GROUP BY department_id, job_id
ORDER BY SUM(salary);
HAVING ile Grup Sonuçlarını Koşullara göre Kısıtlama:
Gruplamada where kullanılmaz onun yerine having kelimesinden yaralanılır ve şartlar having’den sonra yazılır.
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;
bu sorgu where gibi çalışır fakat şarta göre gruplama yapar.
Diğer örneğimiz:
SELECT job_id, SUM(salary) "Toplam Maaş"
FROM employees
WHERE job_id NOT LIKE '%REP%'
GROUP BY job_id
HAVING SUM(salary) > 12000
ORDER BY SUM(salary);
job id içinde rep olmayan, job id ile grupla, maası 12000'den büyük olanları maasa göre sıralanmasını belirtik.
Grup Fonksiyonlarını İç İçe Kullanma:
Grup fonksiyonları kullanırken dikkatli olmak gerekir, yeri önem taşır. Örneğimizi inceleyelim.
SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;
grup fonksiyonlarında ilk önce iç kısımda yer alan hesaplanır sonra dıştakiler hesaplanır. Bu sorguda önce maaşların ortalamasını aldık sonra en büyüğünü yazdırdık.
SELECT AVG(MAX(salary))
FROM employees
GROUP BY department_id;
önce max maaşlar bulundu sonra gruplandı.
Bir konunun daha sonuna geldik. Kafanıza takılan merak ettiğiniz şeyler olursa sormaktan çekinmeyin. Görüşmek üzere :)