ELECTE 4.0 yayında — AI Agent artık burada.Yenilikleri gör
Veri & analiz13 dakikalık okuma

SQL'de CASE WHEN: veri analizi için pratik kılavuz

SQL'deki case when komutuyla koşullu mantığı öğrenin. Sözdizimini, gerçek örnekleri ve verileri iş bilgilerine dönüştürmeyi öğrenin.

CASE WHEN in SQL: guida pratica per l'analisi dei dati

Bu makaleyi yapay zekayla özetle

Verilerle çalışıyorsan, SQL'deki CASE WHEN ifadesi sorguların için tam bir İsviçre çakısı gibidir. Keşfettikten sonra nasıl olmadan idare ettiğini merak ettiğin türden bir yan tümcedir. Koşullu mantığı (yani "şu olursa, bunu yap" tarzı bir yaklaşımı) doğrudan analizine eklemeni sağlar

Binlerce satırı bir hesap tablosuna aktarıp müşterileri elle segmentlere ayırmak ya da satışları sınıflandırmak yerine, CASE WHEN ile bu mantığı doğrudan sorgunun içine yerleştirebilirsin. Senin için bunun anlamı: daha hızlı raporlar, daha isabetli analizler ve nihayetinde daha akıllı iş kararları. Bu, veri analizlerini gerçek anlamda proaktif hale getirmenin ilk adımıdır.

SQL'de CASE WHEN gerçekten ne yapar?

Otoyoldaki araba sırası gibi, düzensiz bir veri akışı hayal et. Kurallar olmadan bu, sadece uzun bir araç kuyruğudur. CASE WHEN akıllı bir sıralama sistemi gibi çalışır: kırmızı arabalar sola, mavi arabalar sağa, geri kalanların hepsi kendi yoluna doğru düz gider.

Aynı şekilde, SQL'de verileri alıp tek bir cümle ile temiz, düzenli ve analiz edilmeye hazır bilgilere dönüştürebilirsiniz.

Bir KOBİ için bu, basit bir teknik hile değil, somut bir stratejik avantajdır. Veri analizi, yavaş ve manuel adımlardan oluşan reaktif bir süreçten, proaktif ve anlık bir sürece dönüşür. İşletmeniz için avantajları açıktır:

  • Gerçek zamanlı temizlik: verileri çekerken değerleri düzeltir ve standartlaştırırsın
  • Dinamik kategorizasyon: müşterileri, ürünleri ve işlemleri performansa, tarihe veya değere göre segmentlere ayırırsın
  • Bağlamsal zenginleştirme: iş durumu içeren sütunlar oluşturursun ("Sadık Müşteri", "Risk Altında")

Özünde CASE WHEN, verilerini basit sayılardan stratejik içgörülere dönüştürmenin ilk adımıdır. Ham bir tabloyu, daha iyi kararlar almanı sağlayan bir rapora bağlayan köprüdür.

Önümüzdeki bölümlerde, bu cümleyi tam olarak öğrenmek ve somut iş sorunlarını çözmek için doğru sözdizimini ve pratik örnekleri göreceğiz.

Case when sözdizimini adım adım öğrenmek

SQL'de koşullu mantığa hakim olmak için en iyi yol, temellerden başlayıp CASE WHEN'in yapısını iyice anlamaktır. En basit halinden, ilk adımlarını atanlar için mükemmel olan "Basit CASE"den başlayalım.

Bu sürüm, tek bir sütunun değerlerini kontrol etmeniz ve her birine farklı bir sonuç atamanız gerektiğinde idealdir. Basit, temiz, etkili.

CASE Semplice'nin yapısı

Sözdizimi şaşırtıcı derecede sezgiseldir. Pratik bir örnek verelim: 'Gönderildi', 'İşlemde' veya 'İptal Edildi' gibi metin değerleri içeren bir StatoOrdine sütununun olduğunu düşün. Raporların için sayısal bir kod olması çok daha kullanışlı olurdu, değil mi?

İşte bu metni sayılara dönüştürebilirsiniz:

SELECTIDOrdine,StatoOrdine,CASE StatoOrdineWHEN 'Spedito' THEN 1WHEN 'In Lavorazione' THEN 2WHEN 'Annullato' THEN 3ELSE 0 -- Bu bizim güvenlik ağımızENDASStatoNumericoFROM Vendite;

Gördüğün gibi, CASE incelenecek sütunu işaret eder (StatoOrdine). Her WHEN, değerin belirli bir şeye eşit olup olmadığını kontrol eder ve THEN karşılık gelen sonucu atar.

ELSE yan tümcesi çok önemlidir. Bir tür güvenlik ağı gibidir: WHEN koşullarından hiçbiri sağlanmazsa, bir varsayılan değer atar (burada 0), seni rahatsız edici NULL sonuçlarından korur. Benzer tabloları eylem halinde görmek istersen, şu örnek veritabanına göz atabilirsin.

CASE'in gücü Aranıyor

"Aranan CASE" (ya da Searched CASE) gerçek anlamda bir alet çantasıdır. Bu ifadenin gerçek esnekliğinin ortaya çıktığı yer burasıdır, çünkü artık tek bir sütunu kontrol etmekle sınırlı değilsin.

Aranan CASE ile, AND ve OR gibi mantıksal operatörleri ya da > ve < gibi karşılaştırma operatörlerini kullanarak birden fazla alanı aynı anda değerlendiren karmaşık koşullar oluşturabilirsin. Sorgunun içine doğrudan detaylı iş mantıkları eklemek için mükemmel bir araçtır.

Aranan CASE, basit bir eşitlik kontrolüyle sınırlı değildir. Belirli bir koşulun bütün olarak doğru olup olmadığını değerlendirir, bu sayede şirketinin gerçek dinamiklerini yansıtan sofistike kurallar oluşturma gücünü sana verir.

Satışları tutar ve ürün kategorisine göre sınıflandırmak istediğinizi varsayalım. Bunu şu şekilde yapabilirsiniz:

SELECTIDProdotto,Prezzo,Categoria,CASEWHEN Prezzo > 1000 AND Categoria = 'Elettronica' THEN 'Vendita Premium'WHEN Prezzo > 500 THEN 'Vendita Alto Valore'ELSE 'Vendita Standard'ENDASSegmentoVenditaFROM Vendite;

Birden fazla koşulu iç içe geçirebilme yeteneği, CASE WHEN'i yüzeyin ötesine geçmek isteyen her veri analizi için vazgeçilmez bir temel taşı yapan şeydir.

İşte, doğru zamanda doğru olanı seçmenize yardımcı olmak için iki sözdizimi arasındaki temel farkları özetleyen bir tablo.

Basit case ve aranan case sözdizimi karşılaştırması

Bu tablo, CASE cümlesinin iki ana biçimini doğrudan karşılaştırarak, her birinin ne zaman kullanılacağını vurgulamakta ve kolay anlaşılması için yapılarını yan yana göstermektedir.

İkisi arasında seçim yapmak "daha iyi" veya "daha kötü" meselesi değil, yapılacak işe en uygun aracı kullanmakla ilgilidir. Doğrudan ve hızlı kontroller için Basit CASE mükemmeldir; karmaşık iş mantığı için ise Arama CASE zorunlu seçimdir.

Görsel olarak CASE WHEN'i, ham verileri alıp iyi tanımlanmış kategorilere yönlendiren bir karar ağacı gibi hayal edebilirsin, bu da analizlerine düzen ve netlik kazandırır.


Bu resim tam da bunu gösteriyor: Tek bir SQL komutu, her bir müşteriyi alıp birkaç kurala göre doğru kategoriye yönlendirebilir. Bu, verilere uygulanan koşullu mantığın gücüdür.

Ham verileri iş içgörülerine dönüştürme

Sözdizimi artık sır olmaktan çıktığına göre, CASE WHEN'i gerçek iş senaryolarında iş başında görme zamanı geldi. Bu yan tümcenin gerçek gücü, sayıları ve kodları somut içgörülere, şirketin için gerçek stratejik göstergelere dönüştürmek için kullandığında ortaya çıkar.

İki temel uygulamaya odaklanacağız: müşteri segmentasyonu ve ürün marj analizi. Bu, içgüdüye değil verilere dayalı kararlar almak için atılması gereken ilk ve belirleyici adımdır.

Müşterileri değere göre segmentlere ayırmak

Herhangi bir şirket için en yaygın hedeflerden biri, en iyi müşterilerin kim olduğunu anlamaktır. Yüksek, orta ve düşük değerli müşteri segmentlerini belirlemek, pazarlama kampanyalarını kişiselleştirmene, satış stratejilerini optimize etmene ve müşteri sadakatini artırmana olanak tanır.

CASE WHEN ile bu segmentasyonu doğrudan sorgunun içinde oluşturabilirsin. ClienteID ve TotaleAcquistato sütunlarına sahip bir FatturatoClienti tablosun olduğunu düşün.

İşte her müşteriyi tek seferde etiketleyebileceğiniz yöntem:

SELECTClienteID,TotaleAcquistato,CASEWHEN TotaleAcquistato > 5000 THEN 'Alto Valore'WHEN TotaleAcquistato BETWEEN 1000 AND 5000 THEN 'Medio Valore'ELSE 'Basso Valore'ENDASSegmentoClienteFROM FatturatoClientiORDER BY TotaleAcquistato DESC;

Bu tek ifadeyle, ham verileri anında bir iş bağlamıyla zenginleştiren yeni bir sütun, SegmentoCliente, eklemiş oldun. Artık her segmentte kaç müşterin olduğunu kolayca sayabilir veya onların belirli satın alma davranışlarını analiz ederek pazarlama kampanyalarının ROI'sini iyileştirebilirsin.

Ürünlerin marjını hesaplamak ve sınıflandırmak

case when sql'in bir diğer stratejik kullanımı da kârlılık analizidir. Tüm ürünler kârlara aynı şekilde katkıda bulunmaz. Ürünleri kâr marjlarına göre sınıflandırmak, çabalarını nereye odaklayacağına, hangilerini promosyona sokacağına ve belki de hangilerinden vazgeçmen gerektiğine karar vermene yardımcı olur.

PrezzoVendita ve CostoAcquisto sütunlarına sahip bir Prodotti tablosunu ele alalım. Önce kâr marjını hesaplayacağız, hemen ardından da sınıflandıracağız.

SELECTNomeProdotto,PrezzoVendita,CostoAcquisto,CASEWHEN (PrezzoVendita - CostoAcquisto) / PrezzoVendita > 0.5 THEN 'Alta Marginalità'WHEN (PrezzoVendita - CostoAcquisto) / PrezzoVendita BETWEEN 0.2 AND 0.5 THEN 'Media Marginalità'ELSE 'Bassa Marginalità'ENDASCategoriaMarginalitaFROM ProdottiWHERE PrezzoVendita > 0; -- Sıfıra bölmeyi önlemek için çok önemli

Burada da, tek bir sorgu, basit fiyat sütunlarını stratejik bir sınıflandırmaya dönüştürdü. Bu sınıflandırma, kataloğunuzu optimize etmek ve karınızı maksimize etmek için raporlarınızda kullanıma hazırdır.


SQL'den analitik platformlarıyla otomasyona

Bu sorguları yazabilmek çok değerli bir beceridir. Peki, ihtiyaçlar daha karmaşık hale geldiğinde veya teknik bilgiye sahip olmayan yöneticiler bu segmentleri anında oluşturmak zorunda kaldıklarında ne olur? İşte burada modern, kod gerektirmeyen veri analizi platformları devreye girer.

Bu, SQL'i eskitmez, aksine değerini artırır. Mantık aynı kalır, ama uygulama otomatikleşir ve tüm ekibin erişimine açık hale gelir. Sonuç, anında elde edilen bir ROI'dir: iş ekipleri IT departmanına bağımlı kalmadan verileri keşfedebilir ve karmaşık segmentler oluşturabilir, böylece ham verilerden karar almaya yarayan bilgilere giden süreç ciddi şekilde hızlanır. Analistler ise, rutin analizlerin otomatik olarak yönetildiğini bilerek, daha karmaşık sorunlara odaklanma özgürlüğüne sahip olurlar.

CASE WHEN ile gelişmiş teknikler

Şimdi temel segmentasyonla aşinalık kazandığına göre, seviyeyi yükseltme zamanı geldi. CASE WHEN'i tek bir sorgu içinde karmaşık analizler ve gelişmiş raporlama için bir araca nasıl dönüştüreceğimizi birlikte keşfedelim.


Toplama işlevleriyle "pivot tablo" oluşturma

En güçlü tekniklerden biri, CASE WHEN'i SUM, COUNT veya AVG gibi toplama fonksiyonlarıyla birleştirmektir. Bu hile, birden fazla sorgu çalıştırmak zorunda kalmadan farklı segmentler için belirli metrikleri hesaplayarak doğrudan SQL içinde "pivot table" oluşturmanı sağlar.

Aynı raporda, "Premium" müşterilerin toplam cirosunu "Standart" müşterilerin cirosuyla karşılaştırmak istediğinizi varsayalım. Her şeyi tek seferde yapabilirsiniz.

SELECTSUM(CASE WHEN SegmentoCliente = 'Premium' THEN Fatturato ELSE 0 END) AS FatturatoPremium,SUM(CASE WHEN SegmentoCliente = 'Standard' THEN Fatturato ELSE 0 END) AS FatturatoStandardFROM Vendite;

Burada ne oluyor? SUM fonksiyonu, Fatturato'yu sadece WHEN'de belirtilen koşul doğru olduğunda toplar. Diğer tüm satırlar için sıfır toplar. Bu, verileri aynı anda birden fazla boyutta toplamak için inanılmaz derecede verimli bir yöntemdir ve zamandan ve karmaşıklıktan tasarruf sağlar.

İç içe geçmiş durumlarla çok düzeyli mantıkları yönetme

Bazen iş mantığı bu kadar doğrusal değildir. Belki müşterileri sadece ne kadar harcadıklarına göre değil, ne sıklıkla satın aldıklarına göre de segmentlere ayırman gerekir. Burada, bir CASE'i başka bir CASE'in içine yerleştirerek uygulayabileceğin çok katmanlı bir mantık devreye girer.

İç içe geçmiş bir CASE, hassas alt kategoriler oluşturmanı sağlar. Örneğin, "Yüksek Değerli" müşterilerimizi iki ek gruba ayırmak isteyebiliriz: "Sadık" ve "Ara Sıra Alışveriş Yapanlar".

SELECTClienteID,TotaleSpeso,NumeroAcquisti,CASEWHEN TotaleSpeso > 5000 THENCASEWHEN NumeroAcquisti > 10 THEN 'Alto Valore - Fedele'ELSE 'Alto Valore - Occasionale'ENDWHEN TotaleSpeso > 1000 THEN 'Medio Valore'ELSE 'Basso Valore'END AS SegmentoDettagliatoFROM RiepilogoClienti;

Okunabilirliğe dikkat: son derece güçlü olmalarına rağmen, iç içe geçmiş CASE'ler okunması ve sürdürülmesi bir kabusa dönüşebilir. Eğer mantık iki seviye derinliği aşıyorsa, dur. Belki de sorunu birden fazla adıma bölmenin, hatta her şeyi daha temiz hale getirmek için Common Table Expressions (CTE) kullanmanın zamanı gelmiştir.

Çeşitli veritabanları arasındaki farklılıkları ele almak

CASE WHEN köklü bir SQL standardı olsa da, çeşitli veritabanı yönetim sistemleri (DBMS) arasında küçük uygulama farklılıkları vardır. Bunları bilmek, taşınabilir kod yazmak için temel öneme sahiptir.

  • MySQL: Standarda tamamen uyumludur. CASE'i pratik olarak her yerde kullanabilirsin: SELECT, WHERE, GROUP BY ve ORDER BY yan tümcelerinde.
  • PostgreSQL: Standardı çok titiz bir şekilde takip eder ve çok sağlam bir veri tipi yönetimi sunar, bu nedenle THEN içindeki tip dönüşümleri öngörülebilir bir şekilde yönetilir.
  • SQL Server: CASE'i mükemmel şekilde destekler, ama standart olmayan IIF(koşul, doğruysa_değer, yanlışsa_değer) fonksiyonunu da sunar. IIF, basit ikili mantık (tek bir IF/ELSE) için bir kısayoldur, ama okunabilirlik ve taşınabilirlik açısından CASE WHEN en iyi seçim olmaya devam eder.

Bu nüansları bilmek, sadece çalışan değil, aynı zamanda sağlam ve farklı teknolojik bağlamlara kolayca uyarlanabilir case when sql sorguları yazmana yardımcı olacaktır.

Yaygın hatalar ve sorgularınızı hızlandırmanın yolları

Çalışan bir CASE WHEN yazmak sadece ilk adımdır. Gerçek kalite sıçraması, onu sadece doğru değil, aynı zamanda hızlı ve hataya dayanıklı hale getirmeyi öğrendiğinde gelir. Yavaş veya hatalarla dolu bir sorgu, raporlarını mahvedebilir ve iş kararlarını yavaşlatabilir.

Tekniği nasıl geliştirebileceğinizi, en yaygın tuzakları nasıl önleyebileceğinizi ve analizlerinizin performansını nasıl optimize edebileceğinizi birlikte görelim.

Sıraya dikkat: büyük fark yaratan küçük bir püf noktası

Sıklıkla küçümsenen bir detay şu: bir CASE WHEN yan tümcesinde, veritabanı koşulları tam olarak yazdığın sırayla analiz eder. Doğru olan birini bulur bulmaz durur ve sonucu döndürür.

Bu davranış, özellikle milyonlarca satır içeren tablolar üzerinde çalışırken performans üzerinde büyük bir etkiye sahiptir.

Hile ne mi? En sık gerçekleşeceğini düşündüğün koşulları her zaman en başa koy. Bu şekilde, veritabanı motoru satırların çoğu için minimum çaba harcayacak ve çalışma süresini önemli ölçüde azaltacaktır.

En klasik hatalar (ve bunları önleme yolları)

En deneyimli analistler bile bazen klasik hatalara düşerler. Bu hataları bilmek, onları hemen fark edip düzeltmenin en iyi yoludur.

  • ELSE yan tümcesini unutmak
    Bu, bir numaralı hatadır. Eğer ELSE'i atlarsan ve WHEN koşullarından hiçbiri gerçekleşmezse, o satır için sonuç NULL olacaktır. Bu beklenmedik NULL, zincirleme bir etki yaratabilir ve sonraki hesaplamaları bozabilir.
  • Riskli kod:SELECTPrezzo,CASEWHEN Prezzo > 100 THEN 'Alto'WHEN Prezzo > 50 THEN 'Medio'END AS FasciaPrezzo -- Se Prezzo è 40, il risultato è NULLFROM Prodotti;
  • Güvenli çözüm:
    Öngörülmeyen tüm durumları yakalamak için her zaman bir güvenlik ağı olarak ELSE ekle.SELECTPrezzo,CASEWHEN Prezzo > 100 THEN 'Alto'WHEN Prezzo > 50 THEN 'Medio'ELSE 'Basso' -- Ecco la nostra rete di sicurezza!END AS FasciaPrezzoFROM Prodotti;
  • Çakışan veri tipleri
    THEN'den sonraki tüm ifadeler aynı veri tipini (veya uyumlu tipleri) döndürmelidir. Eğer CASE tarafından oluşturulan aynı sütunda metin, sayı ve tarihleri karıştırmaya çalışırsan, veritabanı sana bir hata döndürecektir.
  • Örtüşen koşullar
    Bu, daha sinsi bir mantık hatasıdır. Eğer örtüşen koşulların varsa, altın kuralı hatırla: sadece doğru olarak bulunan ilk koşul çalıştırılır. Sıra her şeydir. Eğer WHEN TotaleAcquistato > 1000'i WHEN TotaleAcquistato > 5000'den önce koyarsan, hiçbir müşteri asla 'VIP' olarak etiketlenmeyecektir, çünkü ilk koşul onu her zaman önce "yakalayacaktır".

CASE WHEN'e alternatifler var mı?

case when sql evrensel standart olsa da – ve okunabilirlik ile uyumluluk açısından neredeyse her zaman en iyi seçim olsa da – bazı SQL lehçeleri kısayollar sunar.

Örneğin SQL Server'da, IIF(koşul, doğruysa_değer, yanlışsa_değer) fonksiyonunu bulursun. Basit ikili mantık için kullanışlıdır, ama CASE, birden fazla koşulu yönetmek ve karmaşık senaryolardaki netliği açısından yenilmez olmaya devam eder.

Vakaların büyük çoğunluğunda, standart CASE WHEN'e bağlı kalmak en akıllıca seçimdir. Bu, kodunun herkes tarafından anlaşılmasını ve farklı platformlarda sürpriz olmadan çalışmasını garanti eder.

CASE WHEN'in ötesinde: SQL artık yeterli olmadığında

CASE WHEN sorguları yazmak yararlıdır. Ancak, aylık raporlar için her hafta aynı segmentasyon mantığını yeniden yazmak zorunda kalıyorsanız veya daha da kötüsü, pazarlama ekibiniz iki günde bir "bu segmenti de ekleyebilir misiniz?" diye soruyorsa, sorun SQL değil, ölçeklenebilirliktir.

Sorgu yazmak darboğaz haline geldiğinde

Koşullu mantık aynı kalır - ister elle yazın ister arayüz aracılığıyla tanımlayın - ancak harcadığınız zaman büyük ölçüde değişir. Yazılması, test edilmesi ve belgelenmesi 20 dakika süren bir sorgu, görsel bir arayüzle 2 dakikada yeniden oluşturulabilir. Bunu bir ayda yaptığınız tüm analizlerle çarpın ve zamanın nereye gittiğini anlayın.

Gerçek sorun SQL yazmak değil. Sen sorgu yazarken, ekibindeki bir başkası kararlar almak için veri beklemesidir. Ve veriler nihayet geldiğinde, harekete geçmek için gerekli uygun zaman penceresi genellikle çoktan daralmış olur.

ELECTE gibi platformlar tam olarak bunu ELECTE : iş mantığından sorguya çeviri. SQL yazmayı bilmenin değerini ortadan kaldırmaz - aksine, arka planda neler olduğunu anlamak, herhangi bir analiz aracını çok daha etkili bir şekilde kullanmanızı sağlar. Ancak tekrarlayan işleri ortadan kaldırır.

Pratikteki fark: Müşterileri segmentlere ayırmak için saatlerce sorgu yazıp hata ayıklamak yerine, 5 dakikanızı kuralları tanımlamaya ayırın ve geri kalan zamanınızı bu segmentlerin işiniz için ne anlama geldiğini analiz etmeye ayırın. Bu sihir değil, sadece "bir sorum var" ile "bir cevabım var" arasındaki sürtünmeyi ortadan kaldırmaktır.

Günün yarısını verileri analiz etmek yerine çıkarmakla geçiriyorsanız, muhtemelen darboğazın nerede olduğunu zaten anlamışsınızdır.

Manuel SQL'den otomatik içgörüye

ELECTE gibi platformlar, kod gerektirmeyen arayüzler aracılığıyla CASE WHEN mantığını ELECTE . Tek bir satır kod yazmadan, birkaç tıklama ile segmentasyon kurallarını tanımlayın. Sonuç: Eskiden saatler süren analizler artık dakikalar içinde hazır ve tüm ekip, BT departmanına bağımlı olmadan bu analizlere erişebilir.

Perde arkasında, platform benzer ve genellikle çok daha gelişmiş koşullu mantıklar uygulayarak sizi tekrarlayan görevlerden kurtarır. Bu sayede yöneticiler ve analistler, rakamları "nasıl" elde edecekleri yerine, rakamların ardındaki "neden"lere odaklanabilirler.

CASE WHEN hakkında sık sorulan sorular

Birçok örnek gördükten sonra bile, hâlâ bazı merak konuları olması normaldir. SQL'de CASE WHEN kullanmaya başlarken ortaya çıkan en yaygın sorulara yanıt verelim.

SQL'de CASE ve IF arasındaki fark nedir?

Temel fark: taşınabilirlik. CASE WHEN, SQL standardının (ANSI SQL) bir parçasıdır, bu da kodunun PostgreSQL ve MySQL'den SQL Server ve Oracle'a kadar hemen hemen her modern veritabanında çalışacağı anlamına gelir.

IF() ifadesi ise genellikle SQL Server'ın T-SQL'i gibi belirli bir SQL lehçesine özgü bir fonksiyondur. Basit bir ikili koşul için daha kısa görünebilse de, CASE WHEN, okunabilir ve her yerde değişiklik yapılmadan çalışan kod yazmak için profesyonellerin tercihidir.

WHERE cümlesinde CASE WHEN kullanabilir miyim?

Kesinlikle evet. En yaygın kullanım değil, ancak belirli senaryolarda karmaşık koşullu filtreler oluşturmak için inanılmaz derecede güçlüdür. Örneğin, tüm "premium" müşterileri, veya sadece bir yıldan fazla süredir alışveriş yapmayan "standart" müşterileri çekmek istediğinizi hayal edin.

Mantığı şu şekilde ayarlayabilirsiniz:

SELECT NomeCliente, UltimoAcquistoFROM ClientiWHERECASEWHEN Segmento = 'Premium' THEN 1WHEN Segmento = 'Standard' AND UltimoAcquisto < '2023-01-01' THEN 1ELSE 0END = 1;

Pratikte, veritabanına "bu karmaşık mantığın 1 sonucunu verdiği satırları dikkate al" diyorsunuz.

Kaç tane WHEN koşulu olabilir?

Teorik olarak, SQL standardı WHEN sayısına katı bir sınır koymaz. Gerçekte ise, onlarca koşul içeren bir sorgu okunması, sürdürülmesi ve optimize edilmesi bir kabusa dönüşür.

Kendinizi bitmek bilmeyen bir CASE yazarken bulursanız, bunu bir alarm zili olarak algılayın. Muhtemelen sorunu çözmenin daha akıllıca bir yolu vardır, belki de sorguyu daha temiz ve verimli hale getirmek için bir lookup table (eşleme tablosu) kullanmak gibi.

CASE WHEN, NULL değerleriyle nasıl çalışır?

Burada dikkatli olmak gerekir. SQL'de NULL değerleri özeldir. WHEN Colonna = NULL gibi bir koşul beklediğiniz gibi asla çalışmaz, çünkü SQL'de NULL hiçbir şeye eşit değildir, kendisine bile. Bir değerin NULL olup olmadığını kontrol etmek için doğru sözdizimi her zaman WHEN Colonna IS NULL'dır.

Bu durumlarda, ELSE ifadesi en iyi dostunuz haline gelir. WHEN ile kapsanmayan tüm durumları, NULL değerleri de dahil olmak üzere, temiz ve öngörülebilir bir şekilde yönetmenizi sağlar. Bir varsayılan değer atamak için kullanın ve analizlerinizde beklenmedik sonuçlarla karşılaşmaktan kaçının.

Yorumlar

Henüz yorum yok — konuşmayı başlatın.