Ana içeriğe atla

SQL'de Toplama (Aggregate) Fonksiyonları

SQL'de sonuçları özetlemek ve veriler hakkında faydalı içgörüler elde etmek için toplama (aggregate) fonksiyonlarını nasıl kullanacağınızı öğrenin.
Güncel 3 Eki 2026  · 9 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Bir veri kümesinden raporlar oluşturmak, veriyle çalışıyorsanız temel bir beceridir. Çünkü nihayetinde, elinizdeki verileri kullanarak kritik iş sorularını yanıtlayabilmek istersiniz. Çoğu zaman bu yanıtlar rapor grafikleri şeklinde sunulur. Ancak bazen tablo biçiminde raporlar da gerekir. Her iki durumda da verileri basit hesaplamalarla özetlemeniz gerekebilir. SQL’de, verileri toplama (aggregate) fonksiyonları ile özetleyebilirsiniz. Bu fonksiyonlarla şu tür soruları yanıtlayabilirsiniz:

  • some_column_from_the_table için maksimum değer nedir? veya
  • another_column_from_the_table göz önünde bulundurulduğunda some_column_from_the_table sütununun minimum değerleri nelerdir?

ve daha fazlası.

Hadi bazı veri toplama işlemleri yapmaya başlayalım.

Not: Bu eğitimi takip edebilmek için PostgreSQL’de (RDBMS olarak bunu kullanacaksınız) temel sorgular yazmayı bilmeniz gerekir. Bu eğitim iyi bir hatırlatma olabilir.

Veritabanının Kurulumu

Önce bir PostgreSQL veritabanı kuralım ve bu eğitimde kullanacağınız tabloyu içeren bu yedeği geri yükleyelim. PostgreSQL’de bir veritabanı yedeğinin nasıl geri yükleneceğini öğrenmek isterseniz, bu eğitimin ilk bölümünü takip edebilirsiniz.

Yedeği geri yükleyebildiyseniz, veritabanında international_debt adında bir tablo görmelisiniz (eğer yoksa önce bir veritabanı oluşturmanız gerekecek). Tabloyun ilk birkaç satırına hızlıca göz atalım (basit bir select sorgusu bunu yapmanızı sağlayacaktır):

database

Tablo, dünyadaki farklı ülkelerin bu yıla ait çeşitli kategorilerdeki borç istatistiklerine ilişkin bilgileri içerir (indicator_name ve indicator_code sütunlarına bakın). debt sütunu, belirli bir ülkenin belirli bir kategoride sahip olduğu borç miktarını (USD cinsinden) gösterir. Veriler ekonomi alanına aittir ve farklı ülkelerin ekonomik durumlarını analiz etmek için sıklıkla kullanılır. Veriler Dünya Bankası’ndan toplanmıştır.

Artık veritabanını başarıyla kurduğunuza göre, veri hakkında daha fazla bilgi edinmek için bazı basit sorgular çalıştıralım. pgAdmin aracını açın ve başlayın.

Basit Bilgiler Önemlidir

Yukarıdaki görselden, tek bir ülke için fakat farklı kategorilerde birçok yinelenen kayıt olduğunu görebilirsiniz. Buradan hızla şu soru ortaya çıkar:

Tabloda kayıtları bulunan farklı ülkeler hangileridir?

Sadece country_name sütunuyla bir select sorgusu çalıştırırsanız, sorgunun sonucu yinelenen değerler içereceği için bu soruya doğru yanıtı alamazsınız. Bunu önlemek için DISTINCT anahtar sözcüğünü kullanalım.

select distinct country_name from international_debt;

Ve bu, şöyle bir sonuç döndürmelidir:

return

Artık yukarıdaki soruya makul bir yanıtınız var. Toplama fonksiyonlarına geçmeden önce son bir soru:

Tabloda kaç farklı türde borç göstergesi (indicator) var?

Bunu yanıtlayacak sorgu yukarıdakine benzer olmalı. Yalnızca sütun adını değiştirmeniz yeterli. Bunu bir alıştırma olarak alın, olur mu? Sonuç aşağıdakine benzer olmalıdır:

return

Toplama (Aggregate) Fonksiyonları

Bir toplama fonksiyonu içeren bir sorgu çalıştırarak başlayalım ve buna göre ilerleyelim. Bu süreçte, SQL’de toplama fonksiyonlarını uygularken kullanmanız gereken sözdizimlerini ve yapıları öğreneceksiniz.

select sum(debt) from international_debt;

Ve sonuç:

result

SUM() toplama fonksiyonu ile (sayısal değerler içeren) bir sütun boyunca aritmetik toplamı hesaplayabilirsiniz. Yukarıdaki sorgu ile tabloda listelenen ülkelerin toplam bekleyen borcunu öğrenmiş oldunuz.

Not edin ki SUM() toplamı hesaplarken NULL değerleri dikkate almaz. Şimdi şu sorunun cevabını bulalım:

Maksimum borç tutarı nedir?

İmdada yetişen fonksiyon: MAX():

select max(debt) from international_debt;

Ve cevap:

answer

SUM() fonksiyonunda olduğu gibi, MAX() da hesaplama yaparken NULL girdileri dikkate almaz. Benzer bir MIN() fonksiyonu da vardır. debt sütununun minimum değerini Yorumlar bölümünden benimle paylaşır mısınız? Şimdiye kadarki sonuçların doğru olduğundan emin olmak için debt sütununda geçersiz bir kayıt olup olmadığını kontrol etmek iyi bir fikir olacaktır.

Not edin: Bu fonksiyonları yukarıda gösterildiği gibi küçük harfle de kullanabilirsiniz.

Şu sorguyu çalıştırdığınızda: select * from international_debt where debt is null;, boş bir sonuç almalısınız. Şimdi tabloda bulunan farklı ülke sayısının toplamını bulalım.

select count(distinct(country_name)) from international_debt;

Ve görüyorsunuz ki tabloda toplam 124 farklı ülke var. Yukarıdaki sorguda uyguladığınız fonksiyon sıralamasına dikkat edin. Evet, bu şekilde, yani birden fazla toplama fonksiyonunu mantıklı bir biçimde birbirine bağlamak mümkündür.

Diyelim ki debt sütununun ortalama değerini görmek istiyorsunuz. Fonksiyon AVG()’dir:

select avg(debt) from international_debt;

Değerin 1306633214.966397971 (USD) olduğunu görürsünüz. Bu sonuçları uygun sütun adlarıyla sunmak iyi bir fikirdir. Yukarıdaki sonuçlardan, PostgreSQL’in döndürülen sonuçta sütun adını (sorguda yer alan) toplama fonksiyonunun adı olarak değiştirdiğini görebilirsiniz. Bu nedenle, bu sütunlara uygun bir takma ad (alias) vermek iyi olur. Bunu şu şekilde yapabilirsiniz:

select avg(debt) as Average_Debt_By_A_Country from international_debt;

Sonuç çok daha anlaşılırdır:

result

Şimdi bunu biraz daha karmaşıklaştıralım. another_column_from_the_table sütununa göre some_column_from_the_table sütununun minimum değerleri nelerdir? gibi soruları yanıtlayabilmek için bir toplama fonksiyonunu GROUP BY ifadesiyle eşleştirmeniz gerekir. Nasıl yapacağımıza bakalım.

Toplama Fonksiyonları + GROUP BY + daha fazlası

Diyelim ki bir rapor üretmek istiyorsunuz ve bu raporda country_name ile borçlarının toplamını göstereceksiniz. Örnek aşağıdaki gibidir:

report

Bu tür raporlar gerçek dünyada oldukça sık kullanılır. Peki böyle bir raporu elde etmek için sorgu nasıl olmalı? debt üzerinde SUM() fonksiyonunu kullanmanız gerekecek. Ayrıca toplam borçla birlikte country_name’i de göstermeniz gerekir. Şu sorguyu çalıştıralım:

select country_name, sum(debt) from international_debt;

Aşağıdaki hatayı üretmiyor mu?

ERROR: column "international_debt.country_name" must appear in the GROUP BY clause or be used in an aggregate function

Şimdi bunun gerçekte ne anlama geldiğini anlayalım. Bir toplama fonksiyonu (ör. SUM()) ile country_name gibi toplanmamış (unaggregated) bir sütunu kullanıyorsanız, bu toplanmamış sütunu bir GROUP BY ifadesine dahil etmeniz gerekir. Dolayısıyla doğru sorgu şöyle olacaktır:

select country_name, sum(debt) as total_debt from international_debt group by country_name;

Ve sonuç tam da istediğimiz gibidir:

result

Not sorguda takma ad (alias) kullanımına dikkat edin.

Şimdi, bu raporu total_debt sütununa göre azalan şekilde sıralamanız gerektiğini varsayalım. ORDER BY ifadesini hatırladınız mı? Evet, toplama fonksiyonlarını ORDER BY ile de birlikte kullanabilirsiniz:

select country_name, sum(debt) as total_debt from international_debt
group by country_name order by total_debt desc;

Sonuç şimdi ters sıralanmış olmalıdır:

result

Not ORDER BY ifadesinde kullandığınız sütuna dikkat edin.

Şimdi başka önemli bir soru:

Farklı kategoriler arasında (ters sıralı şekilde) en yüksek borç tutarı nedir?

Burada MAX() fonksiyonunu kullanmanız gerekecek. Bu soruyu yanıtlayacak sorguyu artık zorlanmadan yazabilirsiniz.

select indicator_code, max(debt) as maximum_debt from international_debt
group by indicator_code order by maximum_debt desc;

Ve temiz bir rapor alırsınız:

report

Bu tür raporlarda satır sayısını da sınırlayabilirsiniz. Diyelim ki yukarıdaki raporda yalnızca ilk beş kaydı dahil etmek istiyorsunuz. Bunu LIMIT ifadesini kullanarak yapabilirsiniz.

select indicator_code, max(debt) as maximum_debt from international_debt
group by indicator_code order by maximum_debt desc
limit 5;

Bu eğitimin son raporu zamanı. Yukarıdaki rapora ülkelerin adlarını da eklemeniz gerekiyor. Bunu nasıl yapabilirsiniz? Aşağıdaki sorgu bunu yapmanızı sağlayacaktır:

select country_name, indicator_code, max(debt) as maximum_debt from international_debt
group by country_name, indicator_code order by maximum_debt desc;

Bir başka güzel rapor:

report

Yukarıdaki sorguda, SELECT ifadesinden sonra country_name sütununu eklediniz ve ayrıca GROUP BY sonrasına da eklediniz. Bu formatı istediğiniz kadar sütuna genişletebilirsiniz.

Bu tür raporları üretirken GROUP BY, ORDER BY ve LIMIT sırası çok önemlidir. Sırayı yanlışlıkla değiştirirseniz hatalarla karşılaşırsınız. Bunu kendiniz görün:

select country_name, sum(debt) as total_debt from international_debt
order by total_debt desc group by country_name;

Ve şu sonucu alırsınız:

ERROR:  syntax error at or near "group"
LINE 1: ... from international_debt order by total_debt desc group by c...

Yukarıdaki sorguda ORDER BY ifadesini GROUP BY’dan önce yerleştirdiniz; bu kabul edilebilir değildir. Aslında, toplama fonksiyonlarını kullanmıyorken de uygulanamaz. Doğru sıra şudur: GROUP BY -> ORDER BY -> LIMIT. Bunu her zaman hatırlayın.

Bir Sonraki Adımlar

Tebrikler! Bu eğitimin sonuna geldiniz. Bu eğitimde PostgreSQL’deki farklı toplama fonksiyonlarını ve bunları kullanarak nasıl faydalı raporlar üreteceğinizi öğrendiniz. Bunlar bir veri bilimci için gerçekten kritik becerilerdir. SQL becerilerinizi sistematik biçimde ilerletmek için aşağıdaki DataCamp kurslarını alabilirsiniz:

Konular
SQL

SQL Kursları

Kurs

SQL ile Veri İşleme

4 sa
336.8K
Veri Bilimi sorularını yanıtlamak ve PostgreSQL’de analiz için sağlam veri kümeleri hazırlamak üzere gerekli karmaşık SQL sorgularında ustalaşın.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Devamını GörDevamını Gör