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.

  • 🔢 COUNT Davranışı: COUNT(column) NULL değerlerini yok sayarken, COUNT(*) yinelenenler ve NULL'lar dahil olmak üzere tablodaki her satırı sayar.
  • ???? ÖZGÜN Anahtar Kelime: DISTINCT, hesaplama çalışmadan önce yinelenen değerleri kaldırır; ALL ise varsayılan değerdir ve yinelenen değerleri korur.
  • 📉 Minimum ve Maksimum: MIN, sayısal, metin ve tarih türlerinde bir sütundaki en küçük değeri, MAX ise en büyük değeri döndürür.
  • TOPLA ve AVG: Her ikisi de yalnızca sayısal sütunlar üzerinde çalışır ve her ikisi de döndürülen sonuçtan NULL satırlarını hariç tutar.
  • 📊 Eşleştirmeye Göre Gruplandır: GROUP BY eklemek, tek bir özet rakamını her grup için bir özet satırına dönüştürür.
  • ⚠️ NULL Tuzağı: AVG Yalnızca boş olmayan (NULL olmayan) satır sayısına böler, bu nedenle eksik değerler ortalamayı sessizce yükseltir.

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:

  1. COUNT
  2. SUM
  3. AVG
  4. MIN
  5. 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.

FARKLI Anahtar Kelime

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.

AVG GROUP BY ile birlikte kullanılan fonksiyon

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ı.

SSS

MKS WHERE yan tümcesi Toplam hesaplanmadan önce tek tek satırları filtreler. HAVING ise gruplandırılmış sonuçları daha sonra filtreler, bu nedenle yalnızca HAVING, COUNT(*) veya SUM(amount_paid) gibi bir toplama işlemine referans verebilir.

Evet. GROUP BY olmadan, toplama işlemi tüm sonuç kümesini tek bir grup olarak ele alır ve tam olarak bir satır döndürür. GROUP BY eklemek, bu sonucu her farklı grup değeri için bir satıra böler.

Evet. Toplama işleminden farklı olarak ve AVGMIN ve MAX fonksiyonları, karşılaştırılabilir herhangi bir veri türü üzerinde çalışır. Metin sütununda alfabetik olarak ilk ve son değerleri, tarih sütununda ise en erken ve en geç tarihleri ​​döndürürler.

Evet. Metinden SQL'e dönüştürme yardımcıları, "üye başına ortalama ödeme" gibi soruları GROUP BY sorgusuna çevirir. Oluşturulan SQL'i çalıştırın. MySQL Tezgâh Sayıları doğrulamadan önce satır sayılarını kontrol edin.

Genellikle bunun nedeni NULL değerlerinin işlenmesi ve yinelenen birleştirme satırlarıdır. Bir yapay zeka modeli, COUNT(sütun) yerine COUNT(*) kullanabilir veya bir tabloyu iki kez birleştirebilir; bu da her SUM değerini şişirir. Her zaman bilinen bir rakamla doğrulayın.

Bu yazıyı şu şekilde özetleyin: