SQL GRUP FONKSİYONLARI

  • AVG fonksiyonu
  • SUM fonksiyonu
  • MIN fonksiyonu
  • MAX fonksiyonu
  • COUNT fonksiyonu
  • DISTINCT fonksiyonu
  • GROUP BY ifadesi
  • HAVING ifadesi

     Tek satır fonksiyonları, tablonun bir satırına uygulanabiliyor ve buna karşılık gelen bir sonuç satırı elde edilebiliyor.

Bir grup satıra bir fonksiyonun uygulanması söz konusu ise; “çoklu satır” ya da bir başka deyişle “grup fonksiyonlarından” söz edilir.

Grup fonksiyonları tablonun tüm satırlarına uygulanabildiği gibi, GROUP BY sözcüğü yardımıyla da alt gruplara uygulanabilir.

AVG VE SUM

ÖRNEK: Personellerin ortalama ve toplam maaşlarını listeleyelim

SELECT AVG(salary), SUM(salary) FROM hr.employees;

AVG AND SUM

MIN VE MAX

ÖRNEK: Personellerin en düşük ve en yüksek maaşlarını listeleyelim

SELECT MIN(salary), MAX(salary) FROM hr.employees;

MIN MAX

DISTINCT

DISTINCT komutu, verilen sütun yada sütunlardaki verileri gruplayarak, sonuçların birkez gösterilmesini sağlar.

ÖRNEK : Şirketteki İş Pozisyonlarını listeleyelim (Job_id)

SELECT DISTINCT job_id FROM hr.employees;

distinct

COUNT

ÖRNEK : Toplam kaç personel bulunduğunu ve kaç farklı pozisyon bulunduğunu listeleyelim

SELECT COUNT(*),COUNT(distinct job_id) FROM hr.employees;

COUNT

GROUP BY İFADESİ

  • GROUP BY cümleciğiyle tablodaki satırları daha küçük gruplara bölünebilir.
  • GROUP BY fonksiyonu içindeki sütunları SELECT içerisine dahil etmek zorunluluğu vardır. Grup fonksiyonları ile kullanılan sütunlar bu kuralın dışındadır.
  • GROUP BY fonksiyonu içinde sütun alias’ları kullanılamaz.

ÖRNEK : Müdürlüklerin ortalama maaşlarını listeleyelim

SELECT department_id, AVG(salary)
FROM hr.employees
GROUP BY department_id ORDER BY 1;

group by 1

ÖRNEK : Personellerin bulunduğu müdürlükteki, pozisyonlarına göre ortalama ve toplam maaşları listeleyelim

select department_id, job_id, avg(salary) “ortala maaş”, sum(salary) “toplam maaş”,count(*) personel_sayısı
from hr.employees
group by department_id, job_id order by 1

group by

HAVING İFADESİ

  • WHERE ifadesinde gruplar kısıtlanamaz
  • WHERE ifadesinde grup fonksiyonları kullanılamaz
  • Grup kısıtlamasında HAVING ifadesi kullanılır

ÖRNEK : Maaş ortalaması 10000 den büyük olan pozisyonları listeleyelim

SELECT job_id, avg(salary)
FROM hr.employees
GROUP BY job_id
HAVING avg(salary)>10000 ;

having

ÖRNEK : Pozisyon adında REP geçmeyenlerin,  toplam maaşı 50000 den büyük pozisyonları listeleyelim

select job_id, sum(salary)
from hr.employees where job_id not like ‘%REP%’
group by job_id
having sum(salary)>50000

having 2

İÇ-İÇE GRUP FONKSİYONLAR

ÖRNEK : En yüksek maaş ortalaması ve buna sahip departmanı listeleyelim

select DEPARTMENT_ID, avg(salary)
FROM hr.employees
group by DEPARTMENT_ID
having (max(salary))>all(select avg(salary) from hr.employees group by department_id)

içiçegroup fonk