0Pricing
SQL Interview Prep · Ders

N'inci Değer Yoksa NULL Döndürme

Mülakatçıların sevdiği sınır durumunu, yani çok az satırla karşılaşmayı düzgün şekilde ele alın.

N'inci Değer Yoksa NULL Döndürme, CoddyKit'te ücretsiz bir SQL Interview Prep 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 Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.

Görüşmecilerin sevdiği uç durum

N'inci en yüksek değer sorgusunu başarıyla yazdıktan sonra görüşmeci şunu ekler: “Tabloda N'den az farklı maaş varsa ne olacak? Boş sonuç yerine tek bir NULL istiyorum.”

Bu soru, bir sorguyu ezberleyen adaylarla sonuç kümesinin davranışını anlayan adayları birbirinden ayırır. Birçok çözüm, içinde NULL bulunan bir satır yerine sessizce sıfır satır döndürür.

Bu derste amaç, tam olarak bir çıktı satırını zorunlu kılmaktır; N'inci değer yoksa bu satırın değeri NULL olur.

DENSE_RANK tek başına neden satır döndürmez

Standart N'inci en yüksek değer sorgusunu hatırlayın. Yalnızca iki farklı maaş varsa ve 3. maaşı istiyorsanız WHERE rnk = 3 hiçbir satırla eşleşmez; bu nedenle sorgu boş bir küme döndürür: sıfır satır.

Boş küme, içinde NULL bulunan bir satırla aynı şey değildir. Belirtim “NULL döndür” diyorsa, temel mantık doğru olsa bile boş sonuç sınamayı geçemez.

SELECT salary
FROM (
  SELECT salary,
         DENSE_RANK() OVER (ORDER BY salary DESC) AS rnk
  FROM employee
) t
WHERE rnk = 3;  -- returns NO rows if fewer than 3 distinct salaries

Çözüm 1: dış SELECT içine sarma

En basit güvenilir çözüm, N'inci en yüksek değer sorgusunun tamamını tek bir SELECT içindeki skaler alt sorguya dönüştürmektir. Hiçbir satırla eşleşmeyen skaler alt sorgu NULL olarak değerlendirilir ve dış SELECT her zaman tam olarak bir satır üretir.

Bu, LeetCode tarzındaki “NULL döndür” seçeneği için standart yanıttır ve her SQL lehçesinde çalışır.

SELECT (
  SELECT DISTINCT salary
  FROM employee
  ORDER BY salary DESC
  LIMIT 1 OFFSET 2   -- N = 3
) AS third_highest;

Skaler alt sorgu hilesi neden işe yarar

İstediğiniz davranışı sağlayan iki kural birleşir:

  • Skaler alt sorgu en fazla bir değer döndürmelidir. Hiç satır döndürmezse sistem bunun yerine NULL kullanır.
  • FROM içermeyen bir dış SELECT veya tek satırlı bir kaynak her zaman tam olarak bir satır üretir.

Böylece iç sorgu N'inci değeri bulduğunda bu değeri alırsınız; hiçbir şey bulamadığında ise içinde NULL bulunan tek bir satır elde edersiniz. Bu, görüşmecinin belirttiği gereksinimi tam olarak karşılar.

DENSE_RANK sürümüyle Çözüm 1

Aynı sarmalayıcı, pencere işlevi çözümünün çevresinde de çalışır. Sıralanmış sorguyu skaler alt sorgunun içine yerleştirin; N. sırada hiçbir satır yoksa alt sorgu NULL üretir ve dış SELECT yine tek bir satır döndürür.

SELECT (
  SELECT salary
  FROM (
    SELECT salary,
           DENSE_RANK() OVER (ORDER BY salary DESC) AS rnk
    FROM employee
  ) t
  WHERE rnk = 3
) AS third_highest;

Çözüm 2: MAX kendiliğinden NULL döndürür

1. dersteki MAX altı MAX fikrini hatırlayın. Sıfır satır üzerinde çalışan bir toplama işlevi NULL döndürür ve yine tek bir satır üretir. İkinci en yüksek değer için bu, NULL gereksinimini zaten karşılayan temiz ve tek satırlık bir çözümdür.

Dezavantajı şudur: yalnızca MAX iç içe yerleştirmesini gelişigüzel bir N değerine genişletmek karmaşıklaşır; bu nedenle bu çözüm özellikle ikinci en yüksek değer için uygundur.

SELECT MAX(salary) AS second_highest
FROM employee
WHERE salary < (SELECT MAX(salary) FROM employee);

Çözüm 3: geri dönüş değeriyle COALESCE

Ortamınız bir satırı garanti ediyor ancak değer başka bir nedenle eksik olabiliyorsa, açık bir varsayılan sağlamak için sonucu COALESCE ile sarabilirsiniz.

Not: COALESCE yalnızca bir satır mevcut olduğunda yardımcı olur. Boş bir sonuç kümesini satıra dönüştürmez. Bu nedenle önce satırı garanti eden skaler alt sorgu sarmalayıcısıyla birleştirin; ardından COALESCE ile değeri, NULL yerine 0 gibi başka bir değer istiyorsanız değiştirin.

SELECT COALESCE((
  SELECT DISTINCT salary
  FROM employee
  ORDER BY salary DESC
  LIMIT 1 OFFSET 2
), 0) AS third_highest_or_zero;

Ne işe yaramaz

Doğru görünen ancak başarısız olan çözümlere dikkat edin:

  • Sıfır satır döndüren bir sorgunun doğrudan çevresine COALESCE eklemek hiçbir şeyi değiştirmez; COALESCE işlevinin üzerinde çalışacağı bir satır yoktur.
  • IFNULL / ISNULL, COALESCE ile aynı sınırlamaya sahiptir.
  • LIMIT 1 eklemek, hiçbir satır koşulları karşılamadığında yeni bir satır oluşturmaz.

Satır sayısı sorunu yalnızca NULL yerine değer koyan işlevlerle değil, skaler alt sorgu sarmalayıcısı veya toplama işleviyle çözülmelidir.

Örnek çözüm: iki maaş varken 3'üncüyü istemek

Maaşlar: 500, 500, 300. Farklı maaşlar yalnızca 500 ve 300 olduğundan 3. en yüksek maaş yoktur.

  • DENSE_RANK kullanıp 3. sırayı filtrelemek: sıfır satır döndürür. Gereksinimi karşılamaz.
  • Skaler alt sorgu sarmalayıcısı: iç sorgu hiçbir şey bulamaz; bu nedenle dış SELECT tek bir satır döndürür: NULL. Gereksinimi karşılar.
  • COALESCE(..., 0): sayısal bir varsayılan istendiyse tek bir satır döndürür: 0.

Görüşmede açıklamak

Şunları açıklayarak puan kazanın:

  • “En basit sorgu NULL değil, boş bir küme döndürür; bu nedenle tek satırı garanti etmek için onu skaler alt sorguya saracağım.”
  • “Eşleşen satırı olmayan skaler alt sorgu NULL olarak değerlendirilir; bu da gereksinimin tam kendisidir.”
  • “NULL yerine 0 gibi bir varsayılanı tercih ederseniz alt sorgunun çevresine COALESCE ekleyeceğim.”

Satır sayısı ile değer anlamının arasındaki farkı anladığınızı göstermek, bu sorunun asıl amacıdır.

Hepsini bir araya getirme

Sağlam ve parametreleştirilebilir bir N'inci en yüksek değer veya NULL çözümü için farklı maaşları sıralayın, N. sırayı skaler alt sorgunun içinde filtreleyin ve tek bir satırı dış SELECT'in garanti etmesini sağlayın.

Bu tek sorgu, tekrarları DENSE_RANK aracılığıyla ele alır, herhangi bir N değerine genellenebilir ve N farklı maaşların sayısını aştığında düzgün biçimde NULL döndürür.

SELECT (
  SELECT salary
  FROM (
    SELECT salary,
           DENSE_RANK() OVER (ORDER BY salary DESC) AS rnk
    FROM employee
  ) t
  WHERE rnk = :n
  LIMIT 1
) AS nth_highest;

Hızlı Kontrol

Satır sayılarını NULL değerleriyle karşılaştırarak düşünün.

Özet

N mevcut farklı maaşların sayısını aştığında yalın bir sıralama sorgusu boş bir küme döndürür; NULL döndürmez.

  • N'inci en yüksek değer sorgusunu dış SELECT içindeki bir skaler alt sorguya sarın; böylece sorgu her zaman tek bir satır üretir ve eşleşen değer yoksa NULL döndürür.
  • MAX altı MAX biçimi, ikinci en yüksek değer için kendiliğinden NULL döndürür.
  • COALESCE yalnızca bir satır mevcut olduğunda değeri değiştirir; sıfır satırı tek satıra dönüştüremez.

Bir görüşmeci NULL değerinin uygun biçimde ele alınmasını istediğinde satır sayısıyla değeri her zaman birbirinden ayırın.

Sıkça Sorulan Sorular

“N'inci Değer Yoksa NULL Döndürme” dersi ücretsiz mi?

Evet — “N'inci Değer Yoksa NULL Döndürme” 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 Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.

“N'inci Değer Yoksa NULL Döndürme” dersinde ne öğreneceğim?

Mülakatçıların sevdiği sınır durumunu, yani çok az satırla karşılaşmayı düzgün şekilde ele alın. SQL Interview Prep 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 Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, 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.

“N'inci Değer Yoksa NULL Döndürme” 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 Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Interview Prep 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

  1. İkinci En Yüksek Maaş: Beş Yöntem
  2. DENSE_RANK ile N'inci En Yüksek Değer
  3. Departman Başına En Çok Kazanan
  4. N'inci Değer Yoksa NULL Döndürme
← SQL Interview Prep Sayfasına Dön