Takip et

SQL’de Matematiksel İfadeler ve Toplama Fonksiyonları Nasıl Kullanılır?

SQL’de Matematiksel İfadeler ve Toplama Fonksiyonları Nasıl Kullanılır? Veritabanları, modern iş dünyasının ve teknolojik altyapının teme

SQL’de Matematiksel İfadeler ve Toplama Fonksiyonları Nasıl Kullanılır?

Veritabanları, modern iş dünyasının ve teknolojik altyapının temelini oluşturur. Bu veritabanlarında depolanan büyük miktardaki ham veriden anlamlı bilgiler çıkarmak, karar alma süreçleri için hayati öneme sahiptir. SQL (Structured Query Language), veritabanlarıyla etkileşim kurmak, verileri sorgulamak, manipüle etmek ve yönetmek için kullanılan standart bir dildir. SQL’in gücü, sadece veri çekmekle sınırlı değildir; aynı zamanda bu veriler üzerinde karmaşık hesaplamalar yapma ve özet bilgiler üretme yeteneğinden gelir. Bu makalede, SQL’in bu güçlü yönlerini oluşturan matematiksel ifadeler ve toplama (aggregate) fonksiyonlarını derinlemesine inceleyeceğiz. Bu araçlar, verileri dönüştürmek, analiz etmek ve anlamlı raporlar oluşturmak için vazgeçilmezdir.

Bir işletmenin günlük satış verilerini düşünün. Sadece her bir ürünün satış fiyatını bilmek yeterli olmayabilir. Belki de toplam geliri, ortalama ürün fiyatını, en pahalı veya en ucuz ürünü, ya da belirli bir kategoriye ait ürünlerin toplam stok değerini bilmek istersiniz. İşte bu tür analizler için matematiksel ifadeler ve toplama fonksiyonları devreye girer. Bu makale boyunca, bu kavramların ne olduğunu, nasıl kullanıldığını, farklı senaryolarda nasıl birleştirilebileceğini ve en iyi uygulama yöntemlerini detaylı örneklerle açıklayacağız.

Matematiksel İfadeler (Mathematical Expressions)

Matematiksel ifadeler, SQL sorguları içinde sayısal veriler üzerinde aritmetik işlemler yapmak için kullanılır. Bu ifadeler, bir veya daha fazla operatör, işlenen (operand) ve fonksiyon içerebilir. SQL, temel aritmetik işlemlerden daha karmaşık matematiksel fonksiyonlara kadar geniş bir yelpazede destek sunar. Matematiksel ifadeler genellikle SELECT listesinde yeni sütunlar oluşturmak, WHERE yan tümcesinde koşulları belirlemek veya ORDER BY yan tümcesinde sıralama kriterleri tanımlamak için kullanılır.

Temel Aritmetik Operatörler

SQL’de en sık kullanılan aritmetik operatörler şunlardır:

  • + (Toplama): İki sayıyı toplar.
  • - (Çıkarma): Bir sayıdan diğerini çıkarır.
  • * (Çarpma): İki sayıyı çarpar.
  • / (Bölme): Bir sayıyı diğerine böler.
  • % (Modülüs): Bölme işleminden kalanı verir (yalnızca tam sayılar için geçerlidir).

Bu operatörler, sayısal sütunlar, sabit değerler veya başka ifadeler üzerinde kullanılabilir.

Örnekler:

Bir Urunler tablomuz olduğunu varsayalım:


-- Urunler Tablosu Örneği
-- UrunID | UrunAdi | Kategori | Fiyat | StokAdedi
-- --------|----------|----------|-------|-----------
-- 1       | Laptop   | Elektronik| 1200.00| 50
-- 2       | Klavye   | Elektronik| 75.50  | 200
-- 3       | Mouse    | Elektronik| 25.00  | 300
-- 4       | Defter   | Kırtasiye | 5.00   | 1000
-- 5       | Kalem    | Kırtasiye | 2.50   | 500

1. Yeni bir sütun olarak toplam stok değeri hesaplama:


SELECT
    UrunAdi,
    Fiyat,
    StokAdedi,
    Fiyat * StokAdedi AS ToplamStokDegeri
FROM
    Urunler;

Bu sorgu, her bir ürünün birim fiyatı ile stok adedini çarparak, her ürün için toplam stok değerini yeni bir sütun olarak döndürür.

2. İndirimli fiyat hesaplama:


SELECT
    UrunAdi,
    Fiyat AS OrjinalFiyat,
    Fiyat * 0.90 AS IndirimliFiyat -- %10 indirim
FROM
    Urunler
WHERE
    Kategori = 'Elektronik';

Bu örnekte, Elektronik kategorisindeki ürünlerin %10 indirimli fiyatını hesaplıyoruz.

3. Kalanı bulma (Modülüs):


SELECT
    10 % 3 AS Kalan; -- Sonuç: 1

Operatör Önceliği ve Parantez Kullanımı

Matematikte olduğu gibi, SQL’de de aritmetik operatörlerin belirli bir önceliği vardır. Çarpma ve bölme, toplama ve çıkarmadan önce yapılır. Modülüs operatörü de çarpma ve bölme ile aynı önceliğe sahiptir. Eğer bu önceliği değiştirmek isterseniz, parantez () kullanmanız gerekir. Parantez içindeki işlemler her zaman önce değerlendirilir.

Örnek:


SELECT
    10 + 5 * 2 AS Sonuc1, -- Önce çarpma: 10 + 10 = 20
    (10 + 5)  2 AS Sonuc2; -- Önce parantez içi: 15  2 = 30

Matematiksel Fonksiyonlar

SQL, temel aritmetik operatörlerin ötesinde, daha karmaşık matematiksel hesaplamalar için yerleşik fonksiyonlar sunar. Bu fonksiyonlar veritabanı sistemine (MySQL, PostgreSQL, SQL Server, Oracle vb.) göre küçük farklılıklar gösterebilir, ancak çoğu veritabanında benzer işlevlere sahip fonksiyonlar bulunur.

Bazı yaygın matematiksel fonksiyonlar:

  • ABS(sayı): Bir sayının mutlak değerini döndürür.
  • ROUND(sayı, ondalık_basamak_sayısı): Bir sayıyı belirtilen ondalık basamak sayısına yuvarlar.
  • CEIL(sayı) veya CEILING(sayı): Bir sayıyı yukarıya doğru en yakın tam sayıya yuvarlar.
  • FLOOR(sayı): Bir sayıyı aşağıya doğru en yakın tam sayıya yuvarlar.
  • POWER(taban, üs): Bir sayının belirtilen üssünü hesaplar.
  • SQRT(sayı): Bir sayının karekökünü hesaplar.
  • LOG(sayı) veya LN(sayı): Doğal logaritmayı (e tabanında) hesaplar. Bazı sistemlerde LOG(taban, sayı) şeklinde farklı tabanlarda logaritma da alınabilir.
  • RAND() veya RANDOM(): 0 ile 1 arasında rastgele bir sayı üretir.
  • SIGN(sayı): Sayının işaretini döndürür (-1 negatif, 0 sıfır, 1 pozitif).

Örnekler:

1. Fiyatları yuvarlama:


SELECT
    UrunAdi,
    Fiyat,
    ROUND(Fiyat, 0) AS YuvarlanmisFiyat, -- En yakın tam sayıya yuvarlar
    CEIL(Fiyat) AS YukariYuvarla,
    FLOOR(Fiyat) AS AsagiYuvarla
FROM
    Urunler
WHERE
    UrunID = 2; -- Fiyat: 75.50

Sonuç: YuvarlanmisFiyat 76, YukariYuvarla 76, AsagiYuvarla 75 olacaktır.

2. Karekök hesaplama:


SELECT SQRT(64) AS Karekok; -- Sonuç: 8

Veri Tipi Dönüşümü (CAST, CONVERT)

Matematiksel ifadelerle çalışırken, veri tiplerinin uyumlu olması önemlidir. Örneğin, bir metin sütununu doğrudan sayısal bir işlemde kullanamazsınız. Bu gibi durumlarda, CAST() veya CONVERT() fonksiyonlarını kullanarak veri tiplerini dönüştürmek gerekebilir. Bu fonksiyonlar, bir sütunun veya ifadenin veri tipini başka bir veri tipine çevirmek için kullanılır.


-- Varsayalım ki 'MetinFiyat' adında VARCHAR bir sütunumuz var ve içinde '150.75' gibi değerler var.
SELECT
    CAST('150.75' AS DECIMAL(10, 2)) * 2 AS CiftFiyat;

Bu, metin olarak saklanan bir fiyat değerini ondalık sayıya dönüştürür ve ardından matematiksel bir işlem yapar.

Toplama Fonksiyonları (Aggregate Functions)

Toplama fonksiyonları, bir veri kümesi üzerinde (yani birden çok satır üzerinde) işlem yaparak tek bir özet değer döndüren özel SQL fonksiyonlarıdır. Bu fonksiyonlar, büyük veri kümelerinden anlamlı istatistikler çıkarmak için vazgeçilmezdir. Genellikle SELECT listesinde kullanılırlar ve GROUP BY yan tümcesi ile birlikte kullanıldıklarında çok daha güçlü hale gelirler.

Ana Toplama Fonksiyonları

SQL’deki en yaygın toplama fonksiyonları şunlardır:

COUNT(): Satır Sayısını Sayma

COUNT() fonksiyonu, bir sorgu tarafından döndürülen satır sayısını saymak için kullanılır.

  • COUNT(*): NULL değerleri de dahil olmak üzere tüm satırların sayısını döndürür.
  • COUNT(sütun_adı): Belirtilen sütunda NULL olmayan değerlerin sayısını döndürür.
  • COUNT(DISTINCT sütun_adı): Belirtilen sütundaki benzersiz, NULL olmayan değerlerin sayısını döndürür.

Örnekler:


-- Tüm ürünlerin sayısını bulma
SELECT COUNT(*) AS ToplamUrunSayisi FROM Urunler;

-- Fiyatı olan (NULL olmayan) ürünlerin sayısını bulma
SELECT COUNT(Fiyat) AS FiyatliUrunSayisi FROM Urunler;

-- Kaç farklı kategori olduğunu bulma
SELECT COUNT(DISTINCT Kategori) AS FarkliKategoriSayisi FROM Urunler;

SUM(): Sayısal Bir Sütunun Toplamını Alma

SUM() fonksiyonu, sayısal bir sütundaki tüm değerlerin toplamını hesaplar. NULL değerler göz ardı edilir.

Örnek:


-- Tüm ürünlerin toplam stok değerini hesaplama
SELECT SUM(Fiyat * StokAdedi) AS GenelToplamStokDegeri FROM Urunler;

AVG(): Sayısal Bir Sütunun Ortalamasını Alma

AVG() fonksiyonu, sayısal bir sütundaki tüm değerlerin ortalamasını hesaplar. NULL değerler göz ardı edilir.

Örnek:


-- Ortalama ürün fiyatını bulma
SELECT AVG(Fiyat) AS OrtalamaUrunFiyati FROM Urunler;

MIN(): Bir Sütundaki En Küçük Değeri Bulma

MIN() fonksiyonu, belirtilen sütundaki en küçük değeri döndürür. Bu, sayısal, metin veya tarih/saat sütunları için kullanılabilir. NULL değerler göz ardı edilir.

Örnek:


-- En ucuz ürünün fiyatını bulma
SELECT MIN(Fiyat) AS EnUcuzUrunFiyati FROM Urunler;

MAX(): Bir Sütundaki En Büyük Değeri Bulma

MAX() fonksiyonu, belirtilen sütundaki en büyük değeri döndürür. Bu da sayısal, metin veya tarih/saat sütunları için kullanılabilir. NULL değerler göz ardı edilir.

Örnek:


-- En pahalı ürünün fiyatını bulma
SELECT MAX(Fiyat) AS EnPahaliUrunFiyati FROM Urunler;

GROUP BY Yan Tümcesi

Toplama fonksiyonları, tüm bir tablo üzerindeki özetleri hesaplamak için kullanışlıdır, ancak genellikle verileri belirli gruplara ayırıp her grup için özet bilgi almak istenir. İşte bu noktada GROUP BY yan tümcesi devreye girer. GROUP BY, sonuç kümesini bir veya daha fazla sütunun değerlerine göre gruplar ve her grup için toplama fonksiyonlarını çalıştırır.

Örnek:

Bir Calisanlar tablomuz olduğunu varsayalım:


-- Calisanlar Tablosu Örneği
-- CalisanID | Ad    | Soyad | Departman | Maas
-- --------|-------|-------|-----------|-------
-- 1       | Ali   | Yılmaz| İnsan Kay.| 60000
-- 2       | Ayşe  | Demir | İnsan Kay.| 75000
-- 3       | Can   | Kaya  | Finans    | 80000
-- 4       | Elif  | Arslan| Finans    | 90000
-- 5       | Mert  | Çelik | Pazarlama | 65000
-- 6       | Zeynep| Can   | Pazarlama | 70000

1. Her departmanın ortalama maaşını bulma:


SELECT
    Departman,
    AVG(Maas) AS OrtalamaMaas
FROM
    Calisanlar
GROUP BY
    Departman;

Bu sorgu, çalışanları departmanlarına göre gruplar ve her departman için ortalama maaşı hesaplar.

2. Her kategoriye göre toplam stok adedi ve ortalama fiyatı bulma:


SELECT
    Kategori,
    SUM(StokAdedi) AS ToplamStok,
    AVG(Fiyat) AS OrtalamaFiyat
FROM
    Urunler
GROUP BY
    Kategori;

GROUP BY yan tümcesinde birden fazla sütun da kullanabilirsiniz. Bu durumda, gruplama belirtilen tüm sütunların kombinasyonlarına göre yapılır.


-- Varsayalım ki Urunler tablosunda 'Marka' diye bir sütun daha var.
SELECT
    Kategori,
    Marka,
    COUNT(*) AS UrunSayisi
FROM
    Urunler
GROUP BY
    Kategori, Marka;

HAVING Yan Tümcesi

WHERE yan tümcesi, tek tek satırları filtrelemek için kullanılırken, HAVING yan tümcesi GROUP BY ile oluşturulan grupları filtrelemek için kullanılır. Yani, WHERE toplama fonksiyonları uygulanmadan önce satırları filtrelerken, HAVING toplama fonksiyonları uygulandıktan sonra grupları filtreler.

Örnek:

1. Ortalama maaşı 70000’den yüksek olan departmanları bulma:


SELECT
    Departman,
    AVG(Maas) AS OrtalamaMaas
FROM
    Calisanlar
GROUP BY
    Departman
HAVING
    AVG(Maas) > 70000;

Bu sorgu, önce her departmanın ortalama maaşını hesaplar, ardından sadece ortalama maaşı 70000’den fazla olan departmanları döndürür.

2. Toplam stok adedi 500’den az olan kategorileri bulma:


SELECT
    Kategori,
    SUM(StokAdedi) AS ToplamStok
FROM
    Urunler
GROUP BY
    Kategori
HAVING
    SUM(StokAdedi) < 500;

DISTINCT Anahtar Kelimesi ile Toplama Fonksiyonları

DISTINCT anahtar kelimesi, toplama fonksiyonları ile birlikte kullanıldığında, sadece benzersiz değerler üzerinde işlem yapılmasını sağlar. En sık COUNT() ile kullanılır.

Örnek:


-- Kaç farklı maaş değeri olduğunu bulma
SELECT COUNT(DISTINCT Maas) AS FarkliMaasSayisi FROM Calisanlar;

Bu, Calisanlar tablosundaki benzersiz maaş değerlerinin sayısını döndürür.

Matematiksel İfadeler ve Toplama Fonksiyonlarının Birlikte Kullanımı

SQL'in gerçek gücü, matematiksel ifadeleri ve toplama fonksiyonlarını birleştirerek daha karmaşık ve anlamlı analizler yapabilmesinden gelir. Bu kombinasyon, ham veriden ileri düzeyde iş bilgisi çıkarmak için çok sayıda senaryo sunar.

Örnekler:

1. Her kategori için KDV dahil toplam stok değerini hesaplama:


SELECT
    Kategori,
    SUM(Fiyat  StokAdedi  1.18) AS KDV_Dahil_ToplamStokDegeri -- %18 KDV ekliyoruz
FROM
    Urunler
GROUP BY
    Kategori;

Burada, önce her ürün için KDV dahil fiyatı (Fiyat * 1.18) hesaplayan bir matematiksel ifade kullanılıyor, ardından bu değer stok adediyle çarpılıyor ve son olarak SUM() fonksiyonu ile kategori bazında toplam alınıyor.

2. Ortalama maaşın belirli bir yüzdesini bonus olarak hesaplama:


SELECT
    Departman,
    AVG(Maas) AS OrtalamaMaas,
    AVG(Maas) * 0.10 AS OrtalamaBonus -- Ortalama maaşın %10'u
FROM
    Calisanlar
GROUP BY
    Departman
HAVING
    AVG(Maas) > 60000;

Bu örnekte, her departmanın ortalama maaşı hesaplandıktan sonra, bu ortalamanın %10'u bir bonus olarak hesaplanıyor. Ayrıca, sadece ortalama maaşı 60000'den yüksek olan departmanlar filtreleniyor.

3. Bir ürünün satış fiyatı ve maliyeti arasındaki kar marjını yüzdesel olarak hesaplama:

Varsayalım ki Urunler tablosunda Maliyet adında bir sütun daha var.


SELECT
    UrunAdi,
    Fiyat,
    Maliyet,
    ((Fiyat - Maliyet) / Fiyat) * 100 AS KarMarjiYuzdesi
FROM
    Urunler
WHERE
    Fiyat > 0; -- Bölme hatasını önlemek için

Bu sorgu, her ürün için kar marjını yüzde olarak gösteren yeni bir sütun oluşturur. Burada birden fazla aritmetik operatör ve parantez öncelik kurallarına uygun olarak kullanılmıştır.

4. Çalışanların işe giriş tarihinden bugüne kadar geçen gün sayısını hesaplayıp, departman bazında ortalama gün sayısını bulma:

Calisanlar tablosunda GirisTarihi (DATE) adında bir sütun olduğunu varsayalım.


SELECT
    Departman,
    AVG(DATEDIFF(CURRENT_DATE(), GirisTarihi)) AS OrtalamaCalismaGunu -- MySQL/SQL Server
    -- AVG(CURRENT_DATE - GirisTarihi) AS OrtalamaCalismaGunu -- PostgreSQL
    -- AVG(SYSDATE - GirisTarihi) AS OrtalamaCalismaGunu -- Oracle (gün cinsinden)
FROM
    Calisanlar
GROUP BY
    Departman;

Bu örnekte, önce her çalışanın işe giriş tarihinden bugüne kadar geçen gün sayısı (DATEDIFF veya benzeri bir tarih fonksiyonu ile) hesaplanıyor. Bu matematiksel ifadenin sonucu, AVG() fonksiyonu ile departman bazında ortalaması alınıyor.

Pratik Uygulamalar ve En İyi Yöntemler

Matematiksel ifadeler ve toplama fonksiyonları güçlü araçlardır, ancak bunları etkin ve verimli kullanmak için bazı en iyi yöntemleri ve dikkat edilmesi gereken noktaları bilmek önemlidir.

Performans Konuları

  • İndeks Kullanımı: WHERE yan tümcesinde veya GROUP BY yan tümcesinde kullanılan sütunlar üzerinde indeksler oluşturmak, sorgu performansını önemli ölçüde artırabilir. Ancak, matematiksel ifadelerin doğrudan indeksli sütunlar üzerinde kullanılması, indeksin etkinliğini azaltabilir. Örneğin, WHERE Fiyat * 1.18 > 100 yerine WHERE Fiyat > 100 / 1.18 yazmak, indeksin kullanılmasını sağlayabilir.
  • Karmaşık İfadelerden Kaçınma: Çok karmaşık matematiksel ifadeler veya iç içe fonksiyonlar sorgu optimizasyonunu zorlaştırabilir. Mümkün olduğunca basit ifadeler kullanmaya çalışın veya karmaşık hesaplamaları uygulama katmanına taşıyın.
  • Gereksiz Hesaplamalardan Kaçınma: Yalnızca ihtiyacınız olan hesaplamaları yapın. Örneğin, bir sütunun toplamına ihtiyacınız yoksa SUM() kullanmayın.

Veri Doğruluğu ve Tip Uyumluluğu

  • NULL Değerler: Toplama fonksiyonları (SUM, AVG, MIN, MAX) genellikle NULL değerleri göz ardı eder. Bu, beklediğinizden farklı sonuçlar doğurabilir. Örneğin, bir sütunda NULL değerler varsa, AVG() fonksiyonu sadece NULL olmayan değerlerin ortalamasını alacaktır. Eğer NULL değerleri sıfır olarak kabul etmek isterseniz, COALESCE(sütun_adı, 0) veya ISNULL(sütun_adı, 0) gibi fonksiyonları kullanmanız gerekebilir.
  • Veri Tipi Uyumsuzluğu: Sayısal olmayan bir sütunu matematiksel bir işlemde kullanmaya çalışmak genellikle hata verir. CAST() veya CONVERT() kullanarak veri tiplerini doğru bir şekilde dönüştürdüğünüzden emin olun.
  • Bölme Sıfıra: Bir sayıyı sıfıra bölmek hataya neden olur. Bu tür durumları önlemek için CASE ifadeleri veya NULLIF() gibi fonksiyonlar kullanabilirsiniz. Örneğin, SELECT Fiyat / NULLIF(StokAdedi, 0) FROM Urunler;

Okunabilirlik ve Bakım

  • Takma Adlar (Aliases): Hesaplanan sütunlara veya toplama fonksiyonu sonuçlarına anlamlı takma adlar (AS anahtar kelimesi ile) verin. Bu, sorgunun okunabilirliğini artırır ve sonuç kümesini anlamayı kolaylaştırır.
  • Yorumlar: Karmaşık sorgularda, özellikle karmaşık matematiksel ifadeler veya iş mantığı içeren yerlerde yorumlar kullanın.
  • Formatlama: Sorgularınızı düzenli ve okunabilir bir şekilde formatlayın (girintiler, boşluklar vb.).

Sonuç

SQL'deki matematiksel ifadeler ve toplama fonksiyonları, veritabanı yönetiminden çok daha fazlasını sunar; bunlar, ham veriyi değerli iş bilgisine dönüştürmek için analitik bir güç merkezidir. Temel aritmetik işlemlerden karmaşık matematiksel fonksiyonlara ve veri kümeleri üzerinde özet istatistikler çıkaran toplama fonksiyonlarına kadar, bu araçlar veri analistleri, geliştiriciler ve karar vericiler için vazgeçilmezdir.

GROUP BY ve HAVING gibi yan tümcelerle birlikte kullanıldığında, bu fonksiyonlar, verileri anlamlı gruplara ayırma ve bu gruplar üzerinde koşullu analizler yapma yeteneği sağlar. Bu sayede, satış trendlerini, çalışan performansını, stok seviyelerini veya finansal göstergeleri derinlemesine incelemek mümkün hale gelir. Doğru kullanıldığında, bu SQL özellikleri, büyük veri kümelerinden hızlı ve doğru bir şekilde içgörüler elde etmenizi sağlayarak, daha bilinçli ve stratejik kararlar almanıza yardımcı olur.

Bu makalede ele alınan kavramları ve örnekleri pratik yaparak pekiştirmek, SQL becerilerinizi geliştirmek için en iyi yoldur. Unutmayın ki her veritabanı sistemi (MySQL, PostgreSQL, SQL Server, Oracle vb.) fonksiyon adlarında veya davranışlarında küçük farklılıklar gösterebilir, bu nedenle kullandığınız spesifik veritabanının belgelerini kontrol etmek her zaman iyi bir fikirdir. SQL'in bu güçlü yönlerini ustaca kullanarak, verilerinizin anlatmak istediği hikayeyi çok daha net bir şekilde ortaya çıkarabilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version