0Pricing
Coding Interview Prep · Ders

Birikimli Dağılım ve Toplamın Yüzdesi

Bölümler içinde devam eden yüzdeleri ve toplam içindeki payları hesaplayın.

Birikimli Dağılım ve Toplamın Yüzdesi, CoddyKit'te ücretsiz bir Coding 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, 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.

Toplamın Yüzdesi Sorusu

Raporlama mülakatlarının klasik sorusu şudur: "Her kategori toplam gelirin yüzde kaçını oluşturuyor?" Bunun kümülatif versiyonu ise "Toplamın çalışan payı nedir?" sorusudur.

Püf noktası, her satırın değerini tüm bölüm üzerinde hesaplanan bir pencere toplamına bölmektir. Kendi kendine birleştirme gerekmeksizin bir genel toplamı pencere işlevine koyabileceğinizi bilmek, burada ölçülen içgörüdür.

ORDER BY Olmadan Pencere SUM'ı = Genel Toplam

Temel hamle şudur: boş bir OVER ve ORDER BY olmadan kullanılan SUM(amount) OVER (), sonuç kümesinin tamamının toplamını döndürür ve bunu her satırda tekrarlar.

ORDER BY olmadığından çalışan bir çerçeve de yoktur; dolayısıyla varsayılan çerçeve bölümün tamamıdır. Her satırdaki bu toplam, toplam yüzdesi için ihtiyaç duyduğunuz tam paydadır.

SELECT
  category,
  amount,
  SUM(amount) OVER () AS grand_total
FROM category_sales;

Toplamın Yüzdesini Hesaplama

Satır değerini penceredeki genel toplama bölün ve 100 ile çarpın. Tamsayı bölmesinin sonucu sıfıra kırpmaması için ondalık türe dönüştürün.

Bu tek geçişli sorgu, toplam için bir alt sorgu oluşturup bunu ayrıntı satırlarıyla yeniden birleştiren eski kalıbın yerini alır. Daha kısa, daha hızlı ve okunması daha kolaydır.

SELECT
  category,
  amount,
  ROUND(
    100.0 * amount / SUM(amount) OVER (),
    2
  ) AS pct_of_total
FROM category_sales;

Tamsayı Bölmesi Tuzağı

Klasik bir mülakat tuzağı şudur: birçok veritabanında tamsayı sütunları üzerinde yapılan amount / total işlemi tamsayı bölmesi yapar; bu nedenle 1'den küçük bir sonuç 0 olur.

Bunu, önce 100.0 ile (sayısal bir sabitle) çarparak veya işlenenlerden birini dönüştürerek düzeltin: amount::numeric / total. Bu ayrıntıyı unutursanız, mülakatçıların hemen fark edeceği sıfırlardan oluşan bir sütun döner.

SELECT
  category,
  amount * 1.0 / SUM(amount) OVER () AS share,
  CAST(amount AS DECIMAL) / SUM(amount) OVER () AS share_alt
FROM category_sales;

Bir Grup İçinde Toplamın Yüzdesi

Her satırın payını tüm tabloya göre değil, kendi grubuna göre hesaplamak için PARTITION BY ekleyin. Örneğin her ürünün kendi bölgesindeki satışlar içindeki yüzdesi.

SUM(amount) OVER (PARTITION BY region) paydası artık bölge başına sıfırlanır; böylece her bölgedeki yüzdelerin toplamı 100 olur.

SELECT
  region,
  product,
  amount,
  ROUND(
    100.0 * amount / SUM(amount) OVER (PARTITION BY region),
    2
  ) AS pct_of_region
FROM regional_sales;

Toplamın Çalışan Yüzdesi

Toplamın çalışan payını elde etmek için kümülatif bir payı sabit bir paydayla birleştirin: her satıra gelindiğinde genel toplamın ne kadarının biriktiğini bulun.

Payda ORDER BY kullanır (kümülatiftir), pay ise boş bir OVER () kullanır (genel toplamdır). Son satır her zaman %100'e ulaşır.

SELECT
  sale_date,
  amount,
  ROUND(
    100.0 * SUM(amount) OVER (ORDER BY sale_date)
          / SUM(amount) OVER (),
    2
  ) AS running_pct
FROM daily_sales;

CUME_DIST: Kümülatif Dağılım

SQL'de kümülatif dağılım için yerleşik bir işlev vardır: CUME_DIST(). Geçerli satırın değerine eşit veya ondan küçük bir ORDER BY değerine sahip satırların oranını döndürür; sonuç (0, 1] aralığında bir sayıdır.

Bir tutarın elle hesaplanan çalışan payından farklı olarak CUME_DIST, satır konumuyla ilgilidir ve "satırların hangi oranı bu değere eşit veya bu değerin altında?" sorusunu yanıtlar. Yüzdelik dilim tarzı raporlamalarda kullanışlıdır.

SELECT
  score,
  CUME_DIST() OVER (ORDER BY score) AS cume_dist
FROM exam_results;

PERCENT_RANK ve Farkı

Yakın bir benzeri, (rank - 1) / (total_rows - 1) olarak tanımlanan ve 0 ile 1 arasında değişen PERCENT_RANK() işlevdir.

Mülakatta vurgulanması gereken fark şudur: CUME_DIST, payında geçerli satırı içerir ("bu değerde veya altında"); PERCENT_RANK ise ilk satır için 0'dan başlayan göreli sıralamadır. Farklı değerler üretirler ve bunları karıştırmak yaygın bir hatadır.

SELECT
  score,
  CUME_DIST()    OVER (ORDER BY score) AS cd,
  PERCENT_RANK() OVER (ORDER BY score) AS pr
FROM exam_results;

Pareto / 80-20 Analizi

Toplamın çalışan yüzdesi, Pareto analizini mümkün kılar: "Hangi en büyük müşteriler gelirin %80'ini oluşturuyor?" Tutara göre azalan sıralama yapın, çalışan payı hesaplayın ve kümülatif payın ilk kez %80'i aştığı yeri filtreleyin.

Pencere sonuçları WHERE içinde kullanılamadığından, hesaplamayı bir CTE içine alın ve dış sorguda filtreleyin; bu, her pencere işlevi için geçerli olan aynı kuraldır.

WITH ranked AS (
  SELECT
    customer_id,
    revenue,
    SUM(revenue) OVER (ORDER BY revenue DESC)
      / SUM(revenue) OVER () AS running_share
  FROM customer_revenue
)
SELECT *
FROM ranked
WHERE running_share <= 0.80;

Yuvarlama ve Uzlaştırma

Dikkatli olun: her yüzdeyi 2 ondalık basamağa yuvarlamak, sütun toplamının tam olarak 100 yerine 99.99 veya 100.01 olmasına yol açabilir. Mülakat yapanlar, parçaların bütüne eşit toplam verdiğini nasıl garanti ettiğinizi sorabilir.

Yaygın yanıtlar şunlardır: yalnızca görüntüleme sırasında yuvarlamak, matematiksel işlemler için tam hassasiyeti korumak veya bir satıra en büyük kalan düzeltmesi uygulamak. Sorunu adlandırabilmek, çözümden daha önemlidir.

Mülakat İçin Özet Noktalar

Sözlü olarak ifade etmeniz gereken ana çıkarımlar:

  • SUM(x) OVER (), ORDER BY olmadan her satırda genel toplamı verir.
  • Tamsayı bölmesini önlemek için 100.0 ile çarpın.
  • Grup başına paylar için PARTITION BY kullanın.
  • Genel toplam paydasına bölünen kümülatif pay, birikimli payı verir.
  • Dağılım için CUME_DIST ve PERCENT_RANK kullanın; aralarındaki farkı bilin.
  • Pareto/eşik filtrelemesi için bir CTE içine alın.

Hızlı Kontrol

Sonuç kümesinin tamamının genel toplamını her satırda nasıl elde edersiniz?

Özet: Dağılım ve Toplam Yüzdesi

Toplam yüzdesi, bir satırdaki değeri her satırda döndürülen genel toplam olan SUM(x) OVER () değerine böler; tamsayı bölmesini önlemek için her zaman 100.0 ile çarpın ve grup başına paylar için PARTITION BY ekleyin. Genel toplam paydasına bölünen kümülatif pay, 100% ile sona eren birikimli payı verir ve Pareto analizinin temelini oluşturur.

Konuma dayalı dağılım için CUME_DIST ve PERCENT_RANK işlevlerini kullanın ve yuvarlama-uzlaştırma uyarısını unutmayın. Böylece birikimli toplamlar ve hareketli ortalamalar tamamlanır.

Sıkça Sorulan Sorular

“Birikimli Dağılım ve Toplamın Yüzdesi” dersi ücretsiz mi?

Evet — “Birikimli Dağılım ve Toplamın Yüzdesi” 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.

“Birikimli Dağılım ve Toplamın Yüzdesi” dersinde ne öğreneceğim?

Bölümler içinde devam eden yüzdeleri ve toplam içindeki payları 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 4. dersidir.

“Birikimli Dağılım ve Toplamın Yüzdesi” 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. Pencere Çerçeveleriyle Birikimli Toplamlar
  2. ROWS ve RANGE Çerçevelemesi
  3. Kayan Pencerelerde Hareketli Ortalamalar
  4. Birikimli Dağılım ve Toplamın Yüzdesi
← Coding Interview Prep Sayfasına Dön