MySQL Toplama Fonksiyonları: TOPLAM, SAYIM, AVG & MAX
⚡ Akıllı Özet
İşlevleri Toplama MySQL Tek bir sütunun birçok satırında hesaplama yapın ve özetlenmiş bir değer döndürün. Beş ISO standart fonksiyonu — COUNT, SUM, AVGMIN ve MAX değerleri, bir veritabanının ürettiği hemen her raporun temelini oluşturur.

Toplama Fonksiyonları Nelerdir? MySQL?
An toplama işlevi Tek bir sütunun birçok satırını okur ve bunları tek bir değere dönüştürür. Toplama fonksiyonlarının temel amacı şudur:
- Birden fazla satır üzerinde hesaplama yapma
- Bir tablonun tek bir sütununun
- Ve tek bir değer döndürüyoruz.
ISO standardı beş (5) toplu işlevi tanımlar, bunlar şunlardır:
- COUNT
- SUM
- AVG
- MIN
- MAX
Beşinin de geçerli olan tek bir kural var: Toplama fonksiyonları NULL değerlerini dikkate almaz.COUNT(*) tek istisnadır ve bunun nedenini aşağıda inceleyeceğiz.
Neden Toplu İşlevleri Kullanmalı?
Organizasyonun farklı seviyelerinin farklı bilgi gereksinimleri vardır. Üst düzey yöneticiler genellikle bireysel ayrıntılardan ziyade genel rakamlarla ilgilenirler.
Toplama işlevleri, veritabanımızdan kolayca özetlenmiş veriler üretmemize olanak tanır.
Örneğin, myflix veri tabanımızdan yönetim aşağıdaki raporlara ihtiyaç duyabilir:
- En az kiralanan filmler.
- En çok kiralanan filmler
- Her filmin bir ay içinde ortalama kaç kez kiralandığı.
Yukarıdaki raporların tamamı toplama fonksiyonlarından elde edilmiştir. Her birini ayrıntılı olarak inceleyelim.
COUNT işlevi
COUNT fonksiyonu, belirtilen alandaki toplam değer sayısını hem sayısal hem de sayısal olmayan veri türleri için döndürür. Diğer tüm toplama fonksiyonları gibi, COUNT(column) fonksiyonu da NULL değerlerini hariç tutar.
COUNT(*) ifadesi, bir tablodaki tüm satırların sayısını döndüren özel bir formdur. Ayrıca, BOŞ değerler ve tekrarlanan kayıtları sayar, çünkü değerleri değil satırları sayar.
Film kiralama tablosu şu verileri içerir:
| referans numarası | İşlem Tarihi | dönüş tarihi | Üye numarası | film_id | movie_ geri döndü |
|---|---|---|---|---|---|
| 11 | 20-06-2012 | NULL | 1 | 1 | 0 |
| 12 | 22-06-2012 | 25-06-2012 | 1 | 2 | 0 |
| 13 | 22-06-2012 | 25-06-2012 | 3 | 2 | 0 |
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |
| 15 | 23-06-2012 | NULL | 3 | 3 | 0 |
Diyelim ki, kimlik numarası 2 olan filmin kaç kez kiralandığını öğrenmek istiyoruz.
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
Bunu şu şekilde gerçekleştiriyorum: MySQL Tezgâh myflixdb'ye karşı sorgu 3 döndürüyor çünkü üç satırda movie_id 2 bulunuyor.
| COUNT(`movie_id`) |
|---|
| 3 |
FARKLI Anahtar Kelime
COUNT komutu "kaç tane" sorusuna cevap verir. Sonraki soru genellikle "kaç tane" olur. farklı "Bir" ve DISTINCT'in amacı da bu.
DISTINCT anahtar kelimesi, sonuçlarımızdaki yinelenen kayıtları grup bazında kaldırır.ping Aynı değerler bir araya getirildiğinde, yukarıdaki resimde gösterildiği gibi birebir aynıdır.
Öncelikle basit bir sorgu çalıştıralım.
SELECT `movie_id` FROM `movierentals`;
| film_id |
|---|
| 1 |
| 2 |
| 2 |
| 2 |
| 3 |
Şimdi aynı sorguyu DISTINCT anahtar kelimesiyle çalıştıralım:
SELECT DISTINCT `movie_id` FROM `movierentals`;
DISTINCT komutu yinelenen kayıtları atar:
| film_id |
|---|
| 1 |
| 2 |
| 3 |
COUNT, COUNT(*) ve COUNT(DISTINCT)'ten Hangisini Kullanmalısınız?
DISTINCT ayrıca yerleştirilebilir içeride Bu bir toplama fonksiyonudur ve çoğu acemi burada hata yapar. tracAslında sayılan satır sayısı k'dır. Aşağıdaki dört formun tamamı daha önce gösterilen aynı beş satırlık film kiralama tablosuna karşı çalışır, ancak hepsi aynı sayıyı döndürmez. Aradaki fark iki soruya dayanır: Form satırları mı yoksa değerleri mi sayıyor ve yinelenenleri saklıyor mu?
| Form | Önemli olan | Film kiralama sonuçları |
|---|---|---|
| SAYMAK(*) | Yinelenen kayıtlar ve tamamen boş (NULL) olan satırlar da dahil olmak üzere her satır. | 5 |
| COUNT(`movie_id`) | Sütundaki boş olmayan her değer, yinelenenler dahil. | 5 |
| COUNT(`return_date`) | Yalnızca boş olmayan değerler — iki boş dönüş tarihi atlanır. | 3 |
| COUNT(DISTINCT `movie_id`) | Yalnızca benzersiz ve boş olmayan değerler | 3 |
SELECT COUNT(*) AS `all_rows`, COUNT(`return_date`) AS `returned_rows`, COUNT(DISTINCT `movie_id`) AS `unique_movies` FROM `movierentals`;
💡 İpucu: Satır sayımı için COUNT(*), NULL değerinin "uygulanamaz" anlamına geldiği durumlarda COUNT(column) ve benzersiz değerler için COUNT(DISTINCT column) kullanın. DISTINCT'in tersi ALL'dur (varsayılan değerdir ve bu nedenle nadiren yazılır).
MIN işlevi
MIN işlevi belirtilen tablo alanındaki en küçük değeri döndürür.
Kütüphanemizdeki en eski filmin hangi yılda gösterime girdiğini öğrenmek istediğimizi varsayalım. MySQL'nin MIN fonksiyonu bize bunu sağlıyor.
SELECT MIN(`year_released`) FROM `movies`;
Sonuç:
| MIN(`yayınlanma_yılı`) |
|---|
| 2005 |
MAX işlevi
Adından da anlaşılacağı gibi MAX işlevi, MIN işlevinin tam tersidir. BT belirtilen tablo alanından en büyük değeri döndürür.
Veritabanımızdaki en yeni filmin hangi yılda vizyona girdiğini öğrenmek istediğimizi varsayalım. Aşağıdaki örnek bunu döndürüyor.
SELECT MAX(`year_released`) FROM `movies`;
Sonuç:
| MAX(`yayınlanma_yılı`) |
|---|
| 2012 |
TOPLA işlevi
MIN ve MAX, bir sütundan mevcut bir değeri seçer. SUM ve AVG Sütunun tamamından yeni bir sayı hesaplayın.
Diyelim ki şimdiye kadar yapılan toplam ödeme miktarını öğrenmek istiyoruz. MySQL SUM işlev Belirtilen sütundaki tüm değerlerin toplamını döndürür.. SUM yalnızca sayısal alanlarda çalışır, ve NULL değerler sonuçtan hariç tutulur..
Aşağıdaki tabloda ödeme tablosundaki veriler gösterilmektedir.
| ödeme_kimliği | Üye numarası | ödeme tarihi | tanım | ödenen miktar | harici_ referans _numarası |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Film kiralama ödemesi | 2500 | 11 |
| 2 | 1 | 25-07-2012 | Film kiralama ödemesi | 2000 | 12 |
| 3 | 3 | 30-07-2012 | Film kiralama ödemesi | 6000 | NULL |
Aşağıda gösterilen sorgu, yapılan tüm ödemeleri alır ve tek bir sonuçta toplar: 2500 + 2000 + 6000 = 10500.
SELECT SUM(`amount_paid`) FROM `payments`;
Sonuç:
| Ödenen_miktarın TOPLAMI |
|---|
| 10500 |
AVG işlev
MKS MySQL AVG işlev belirtilen bir sütundaki değerlerin ortalamasını döndürür. SUM işlevi gibi, yalnızca sayısal veri türlerinde çalışır.
Diyelim ki ödenen ortalama tutarı bulmak istiyoruz. Toplam 10500'ü, boş olmayan üç ödeme satırına bölen aşağıdaki sorguyu kullanabiliriz.
SELECT AVG(`amount_paid`) FROM `payments`;
Sonuç:
| AVG(`ödenen_miktar`) |
|---|
| 3500 |
⚠️Uyarı: AVG Tablonun satır sayısına değil, boş olmayan (NULL olmayan) satır sayısına bölünür. Boş değerler sıfır olarak sayılmak yerine atlanır, bu da ortalamayı sessizce yukarı çeker. AVGEksik değer sıfır anlamına geldiğinde (IFNULL(`amount_paid`, 0)).
Pratik Örnek: Toplama Fonksiyonlarını GROUP BY ile Birleştirme
Yukarıdaki fonksiyonların her biri tablonun tamamı için tek bir rakam döndürdü. Buna bir rakam eklemek... GROUP BY madde tek bir rakam döndürür grup başına Bunun yerine, gerçek raporlar işte böyle oluşturulur.
Aşağıdaki örnek, üyeleri isimlerine göre gruplandırır, ardından her üye için toplam ödeme sayısını, ortalama ödeme tutarını ve ödeme tutarlarının genel toplamını hesaplar.
SELECT m.`full_names`, COUNT(p.`payment_id`) AS `paymentscount`, AVG(p.`amount_paid`) AS `averagepaymentamount`, SUM(p.`amount_paid`) AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;
Yukarıdaki örneğin yürütülmesi MySQL Workbench bize aşağıdaki sonuçları veriyor.
Sorgu, WHERE yan tümcesinde iki tabloyu birleştirir; bu, eski virgülle birleştirme stilidir. Modern kod, aynı mantığı açık bir şekilde yazar. İÇ BİRLEŞTİRME … AÇIKAyrıca, SELECT listesindeki toplama işlemi uygulanmamış her sütunun GROUP BY ifadesinde de yer alması gerektiğini unutmayın. MySQL 5.7 ve sonraki sürümlerde ONLY_FULL_GROUP_BY altındaki sorguyu reddedin. Bkz. resmi MySQL toplu fonksiyon referansı.


