ORDER BY ve Toplamlarda CASE
Koşullu sıralama ve sayma.
ORDER BY ve Toplamlarda CASE, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
Özel Öncelikle Sıralama
SQL'in ORDER BY yan tümcesi normalde satırları bir sütunun doğal değerine göre sıralar. Ancak tek bir sütunun kendi başına oluşturamayacağı tamamen özel bir sıralama düzeni oluşturmak için CASE ifadesini ORDER BY içine yerleştirebilirsiniz.
Bu teknik, önceliğin ham veri değerleri yerine iş kuralları tarafından belirlendiği durumlarda güçlüdür.
SELECT product_name, status
FROM products
ORDER BY
CASE status
WHEN 'urgent' THEN 1
WHEN 'active' THEN 2
WHEN 'pending' THEN 3
ELSE 4
END;ORDER BY İçinde CASE Nasıl Çalışır?
Veritabanı ORDER BY CASE ... END ifadesini değerlendirirken her satır için bir tam sayı (veya karşılaştırılabilir başka bir değer) hesaplar. Ardından satırlar, ham bir sütun yerine veya ham sütuna ek olarak bu hesaplanan değere göre sıralanır.
CASE ifadesi saklanmaz; yalnızca sorgunun yürütülme süresi boyunca var olur.
SELECT order_id, priority
FROM orders
ORDER BY
CASE priority
WHEN 'high' THEN 1
WHEN 'medium' THEN 2
WHEN 'low' THEN 3
ELSE 9
END,
order_id;NULL Değerlerini Açıkça Sıralama
Varsayılan olarak farklı veritabanları, sıralanmış bir sonuçta NULL değerlerini farklı biçimlerde başa veya sona yerleştirir. ORDER BY içindeki bir CASE, veritabanı motorundan bağımsız olarak NULL değerlerinin tam olarak nereye yerleşeceğine karar vermenizi sağlar.
SELECT employee_name, manager_id
FROM employees
ORDER BY
CASE WHEN manager_id IS NULL THEN 0 ELSE 1 END,
manager_id;Koşullu Artan ve Azalan Sıralama
ORDER BY içindeki bir CASE, koşullu sıralama yönünü de taklit edebilir. Kategori değerlerini negatif sayılara eşleyerek belirli grupların sıralama düzenini etkili bir biçimde tersine çevirirken diğer gruplar için normal sırayı koruyabilirsiniz.
Bu, tek bir sonuç kümesindeki farklı satır türleri için farklı sıralama mantıkları gerektiğinde kullanışlıdır.
SELECT task_name, due_date, is_overdue
FROM tasks
ORDER BY
CASE WHEN is_overdue = 1 THEN 0 ELSE 1 END,
due_date;COUNT İçinde CASE
Bir CASE ifadesini COUNT gibi bir toplulaştırma işlevinin içine yerleştirebilirsiniz. Bunun püf noktası, saymak istediğiniz satırlar için NULL olmayan bir değer, atlamak istediğiniz satırlar içinse NULL döndürmektir — çünkü COUNT, NULL değerlerini yok sayar.
SELECT
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count,
COUNT(CASE WHEN status = 'inactive' THEN 1 END) AS inactive_count
FROM users;SUM İçinde CASE — Koşullu Toplamlar
CASE'i SUM içine yerleştirmek, yalnızca bir koşul doğru olduğunda değerleri toplamanızı ve eşleşmeyen satırları sıfır kabul etmenizi sağlar. Bu, tek bir sütunu birden çok ölçüm sütununa ayıran özet tablo biçimli raporlarda çok yaygın bir örüntüdür.
SELECT
SUM(CASE WHEN region = 'North' THEN sales_amount ELSE 0 END) AS north_total,
SUM(CASE WHEN region = 'South' THEN sales_amount ELSE 0 END) AS south_total,
SUM(CASE WHEN region = 'East' THEN sales_amount ELSE 0 END) AS east_total
FROM sales;CASE ile Koşullu AVG
Aynı örüntü AVG ile de çalışır. AVG, NULL değerlerini yok saydığından hariç tutmak istediğiniz satırlar için NULL döndürmek, alt sorguya gerek kalmadan yalnızca eşleşen satırların ortalamasını üretir.
SELECT
AVG(CASE WHEN department = 'Engineering' THEN salary END) AS avg_eng_salary,
AVG(CASE WHEN department = 'Marketing' THEN salary END) AS avg_mkt_salary
FROM employees;CASE ile Gruplama — Satırları Kategorilere Ayırma
Sürekli değerleri kategorilere ayırmak ve ardından her kategoriyi toplulaştırmak için GROUP BY veya SELECT listesinde CASE kullanabilirsiniz. Bu işlem, temel verileri değiştirmeden sayısal bir sütunu etiketli gruplara dönüştürür.
SELECT
CASE
WHEN age < 18 THEN 'Under 18'
WHEN age BETWEEN 18 AND 35 THEN '18-35'
WHEN age BETWEEN 36 AND 55 THEN '36-55'
ELSE '56+'
END AS age_group,
COUNT(*) AS user_count
FROM users
GROUP BY
CASE
WHEN age < 18 THEN 'Under 18'
WHEN age BETWEEN 18 AND 35 THEN '18-35'
WHEN age BETWEEN 36 AND 55 THEN '36-55'
ELSE '56+'
END;Diğer Ad Kullanma ve CASE'i Tekrarlama
Uzun bir CASE ifadesini hem SELECT hem de GROUP BY içinde tekrarlamak gereksiz uzunluk oluşturur. Bazı veritabanları (MySQL ve geçici çözümlerle PostgreSQL), diğer ada ORDER BY içinde başvurmanıza izin verir; ancak GROUP BY içinde buna izin vermez. En güvenli ve taşınabilir yaklaşım, sorguyu bir alt sorgunun veya CTE'nin içine alıp oradaki diğer ada göre GROUP BY yapmaktır.
WITH scored AS (
SELECT
customer_id,
CASE
WHEN total_spent >= 1000 THEN 'Gold'
WHEN total_spent >= 500 THEN 'Silver'
ELSE 'Bronze'
END AS tier
FROM customers
)
SELECT tier, COUNT(*) AS customer_count
FROM scored
GROUP BY tier
ORDER BY
CASE tier
WHEN 'Gold' THEN 1
WHEN 'Silver' THEN 2
ELSE 3
END;ORDER BY CASE'i ASC / DESC ile Birleştirme
CASE ifadesinden sonra yine ASC veya DESC ekleyebilir ve virgüllerle ayırarak daha fazla sıralama sütunu belirtebilirsiniz. CASE puanı yalnızca ilk sıralama anahtarıdır; sonraki sütunlar eşitlik durumlarını normal şekilde çözer.
SELECT
ticket_id,
category,
created_at
FROM support_tickets
ORDER BY
CASE category
WHEN 'billing' THEN 1
WHEN 'outage' THEN 2
WHEN 'feature' THEN 3
ELSE 4
END ASC,
created_at ASC;Gerçek Dünya Örneği — Satış Panosu
CASE kullanan bir toplama işlemini CASE kullanan bir sıralamayla birleştiren gerçekçi bir sorgu aşağıda yer alıyor. Bu sorgu, bölge bazında bir satış özeti üretir ve en yüksek gelire sahip bölgenin her zaman ilk sırada görünmesini sağlayacak şekilde sıralar; 'Diğer' en alta taşınır.
SELECT
CASE
WHEN region IN ('North', 'South', 'East', 'West') THEN region
ELSE 'Other'
END AS region_label,
SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS completed_sales,
COUNT(CASE WHEN status = 'refunded' THEN 1 END) AS refund_count
FROM orders
GROUP BY
CASE
WHEN region IN ('North', 'South', 'East', 'West') THEN region
ELSE 'Other'
END
ORDER BY completed_sales DESC;Bilgi Kontrolü
ORDER BY içinde ve toplama işlevlerinde CASE kullanımı konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste CASE ifadesini ORDER BY ve toplama işlevleriyle nasıl birleştireceğinizi öğrendiniz:
- ORDER BY içinde CASE — satırlara özel sıralama puanları atamak, NULL değerlerinin nerede görüneceğini denetlemek ve birden çok sıralama kuralını tek bir sorguda birleştirmek.
- COUNT içinde CASE — dahil edilecek satırlar için NULL olmayan bir değer, atlanacak satırlar için örtük veya açık biçimde NULL döndürmek.
- SUM / AVG içinde CASE — tek geçişte koşullu toplamlar ve ortalamalar oluşturmak için ELSE değeri olarak 0 veya NULL kullanmak.
- GROUP BY içinde CASE — toplama işlemi için sürekli veya kategorik değerleri etiketli gruplar hâlinde sınıflandırmak.
Bu kalıplar birçok alt sorguyu ortadan kaldırır ve özet tablo tarzı raporların yalın SQL ile kolayca yazılmasını sağlar.
Sıkça Sorulan Sorular
“ORDER BY ve Toplamlarda CASE” dersi ücretsiz mi?
Evet — “ORDER BY ve Toplamlarda CASE” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“ORDER BY ve Toplamlarda CASE” dersinde ne öğreneceğim?
Koşullu sıralama ve sayma. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“ORDER BY ve Toplamlarda CASE” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- CASE İfadesi
- Aranan ve Basit CASE
- Verileri Gruplara Ayırma ve Etiketleme
- ORDER BY ve Toplamlarda CASE