0Pricing
Coding Interview Prep · Ders

Dönemden Döneme Değişim

LAG ile aydan aya büyümeyi ve günden güne farkları hesaplayın.

Dönemden Döneme Değişim, CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 2. 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, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.

Analistlerin Kesin Karşılaşacağı Soru

Veri analisti rolü için mülakata giriyorsanız şu soruları bekleyin: "Aydan aya büyümeyi hesaplayın" veya "Günden güne değişim nedir?" Bu soruyla karşılaşmamanız neredeyse mümkün değildir.

Temel yapı taşı LAG'dir: Önceki dönemin değerini alın, ardından mutlak farkı veya yüzde değişimini hesaplayın. Bu derste, mülakatçıların değerlendirdiği dönemden döneme değişim kalıplarında LAG kullanımını öğreneceksiniz.

LAG ile Mutlak Değişim

En basit sürüm, bu dönem ile önceki dönem arasındaki ham farktır. Önceki değeri LAG ile alın ve çıkarma işlemini doğrudan yapın.

Sıralanmış ilk satırın önceki satırı yoktur; bu nedenle değişimi NULL olur. Bu bir hata değil, doğrudur: Karşılaştırılacak gerçekten de önceki bir dönem yoktur.

SELECT
  month,
  revenue,
  revenue - LAG(revenue) OVER (ORDER BY month) AS mom_change
FROM monthly_sales
ORDER BY month;

Yüzde Değişimi

Mülakatçılar genellikle büyümeyi yüzde olarak ister. Formül (geçerli - önceki) / önceki değeridir ve sonuç 100 ile çarpılır. Bunu doğrudan LAG ile ifade edin.

İşlemlerin sırasına ve parantezlere dikkat edin; parantezlerden birini yanlış yerleştirmek baskı altında sık yapılan klasik bir hatadır.

SELECT
  month,
  revenue,
  100.0 * (revenue - LAG(revenue) OVER (ORDER BY month))
        / LAG(revenue) OVER (ORDER BY month) AS pct_growth
FROM monthly_sales
ORDER BY month;

Tamsayı Bölmesinden Kaçının

Birçok adayın düştüğü bir tuzak şudur: revenue bir tamsayıysa, tamsayı bölmesi yapan veritabanlarında (110 - 100) / 100 ifadesi 0 olarak değerlendirilir.

Kayan noktalı hesaplamayı zorlamak için önce 100.0 ile çarpın veya ondalık türe dönüştürmek üzere CAST kullanın. Bunu önceden belirtmeniz, ayrıntılara dikkat ettiğinizi gösterir.

SELECT
  month,
  ROUND(
    100.0 * (revenue - LAG(revenue) OVER (ORDER BY month))
          / LAG(revenue) OVER (ORDER BY month), 2
  ) AS pct_growth
FROM monthly_sales;

Daha Temiz Yaklaşım: CTE İçinde Bir Kez Hesaplayın

LAG'i iki kez çağırmak (pay ve payda için) tekrara yol açar ve yazım hatası yapmayı kolaylaştırır. Yaygın bir yeniden düzenleme, önceki değeri bir CTE içinde bir kez hesaplayıp ardından aritmetik işlemi dış sorguda yapmaktır.

Bu yaklaşım, beyaz tahta mülakatında daha okunaklıdır ve iki LAG çağrısının birbirinden farklılaşmasını önler.

WITH t AS (
  SELECT
    month,
    revenue,
    LAG(revenue) OVER (ORDER BY month) AS prev
  FROM monthly_sales
)
SELECT
  month,
  revenue,
  ROUND(100.0 * (revenue - prev) / prev, 2) AS pct_growth
FROM t;

Sıfıra Bölmeye Karşı Koruma Sağlayın

Önceki dönemin değeri 0 olabiliyorsa yüzde formülü sıfıra bölme yapar ve hata verir. Paydanın NULL olmasını ve sonucun istisna yerine NULL dönmesini sağlamak için NULLIF(prev, 0) kullanın.

Hatalara karşı korumalı bölme, mülakatçıların üretim ortamlarını dikkate alan adaylarda fark ettiği küçük ama önemli bir ayrıntıdır.

SELECT
  month,
  revenue,
  100.0 * (revenue - prev) / NULLIF(prev, 0) AS pct_growth
FROM (
  SELECT month, revenue,
         LAG(revenue) OVER (ORDER BY month) AS prev
  FROM monthly_sales
) s;

Grup Bazında Dönemden Döneme Değişim

Gerçek hayattaki soruların çoğu kapsamlıdır: ürün başına veya bölge başına aydan aya büyüme gibi. Her grubun serisinin yalnızca kendi içinde karşılaştırılması için PARTITION BY ekleyin.

Her grubun en erken ayı NULL değerine sıfırlanır; ürün sınırları arasında hiçbir zaman karşılaştırma yapılmaz.

SELECT
  product_id,
  month,
  revenue,
  revenue - LAG(revenue) OVER (
    PARTITION BY product_id
    ORDER BY month
  ) AS mom_change
FROM product_sales;

Ofset ile Yıldan Yıla Değişim

Satırların birer ay arayla bulunduğu aylık verilerde yıldan yıla karşılaştırma yapmak için 12 satır gerideki değerle karşılaştırma yaparsınız. Ofset bağımsız değişkeni bunu doğrudan gerçekleştirir: LAG(revenue, 12).

Bu yaklaşım, boşluk olmadan her ay için bir satır bulunduğunu varsayar. Aylar eksik olabiliyorsa bunun yerine açık bir tarihe göre birleştirme yapmanız gerekir; bu, sözlü olarak belirtmeye değer ince bir ayrıntıdır.

SELECT
  month,
  revenue,
  revenue - LAG(revenue, 12) OVER (ORDER BY month) AS yoy_change
FROM monthly_sales
ORDER BY month;

Karşılaştırmadan Önce Toplayın

Ham olay tabloları aya göre önceden toplanmış değildir. Gerçekçi bir çözümde önce dönem başına bir satır olacak şekilde toplama yapılır, ardından genellikle bir CTE aracılığıyla toplanmış sonuç üzerinde LAG uygulanır.

Toplanmamış satırlar üzerinde LAG kullanmaya çalışmak aylık toplamları değil, tek tek işlemleri karşılaştırır; bu, yaygın bir mantık hatasıdır.

WITH monthly AS (
  SELECT DATE_TRUNC('month', order_date) AS mth,
         SUM(amount) AS revenue
  FROM orders
  GROUP BY 1
)
SELECT mth, revenue,
       revenue - LAG(revenue) OVER (ORDER BY mth) AS mom_change
FROM monthly
ORDER BY mth;

İlk NULL Değerini Yorumlama

Mülakatçılar bazen şöyle sorar: "İlk satırınızın büyümesi neden NULL ve bu kabul edilebilir mi?" Doğru cevap şudur: Önceki bir dönem yoktur; dolayısıyla değişim tanımsızdır ve NULL bunu doğru şekilde temsil eder.

İş gereksinimi bunun yerine 0 istiyorsa LAG(revenue, 1, 0) veya COALESCE kullanabilirsiniz; ancak bunu yalnızca amaçlanan anlamla örtüşüyorsa yapın.

Büyüme Yönünü Etiketleme

Mülakatçılar bazen soruyu şöyle genişletir: "Her ayın büyüdüğünü, küçüldüğünü veya sabit kaldığını da belirtin." LAG karşılaştırmasını bir CASE ifadesine sarın.

Önceki değerle karşılaştırma, sayısal farkın üzerine anlaşılır bir eğilim sütunu ekler ve karşılaştırması olmayan ilk dönem için NULL veya varsayılan bir etiket gösterimini sorunsuz biçimde sağlar.

SELECT
  month,
  revenue,
  CASE
    WHEN revenue > LAG(revenue) OVER (ORDER BY month) THEN 'up'
    WHEN revenue < LAG(revenue) OVER (ORDER BY month) THEN 'down'
    ELSE 'flat'
  END AS trend
FROM monthly_sales
ORDER BY month;

Hızlı Kontrol

Yüzde değişimi sorgularındaki yaygın hatayı bulun.

Özet

Dönemden döneme değişim, LAG ile aritmetik işlemlerin birleşimidir:

  • Mutlak değişim: value - LAG(value) OVER (ORDER BY period).
  • Yüzde değişimi: 100.0 * (value - prev) / NULLIF(prev, 0).
  • Kayan noktalı hesaplamayı zorlayın, sıfıra bölmeye karşı koruma sağlayın ve dönem başına bir satır olacak şekilde önceden toplama yapın.
  • Kapsamı PARTITION BY ile belirleyin; yıldan yıla karşılaştırma için ofseti kullanın.

Sırada: Satırları NTILE ile kovalara ve kademelere ayırmak.

Sıkça Sorulan Sorular

“Dönemden Döneme Değişim” dersi ücretsiz mi?

Evet — “Dönemden Döneme Değişim” 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 Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.

“Dönemden Döneme Değişim” dersinde ne öğreneceğim?

LAG ile aydan aya büyümeyi ve günden güne farkları hesaplayın. Coding 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.

Coding Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Coding 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 2. dersidir.

“Dönemden Döneme Değişim” 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 Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Coding 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. Bitişik Satırlar için LAG ve LEAD
  2. Dönemden Döneme Değişim
  3. Gruplara Ayırma için NTILE
  4. FIRST_VALUE, LAST_VALUE ve Çerçeve Sınırları
← Coding Interview Prep Sayfasına Dön