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.0ile çarpın. - Grup başına paylar için
PARTITION BYkullanın. - Genel toplam paydasına bölünen kümülatif pay, birikimli payı verir.
- Dağılım için
CUME_DISTvePERCENT_RANKkullanı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
- Pencere Çerçeveleriyle Birikimli Toplamlar
- ROWS ve RANGE Çerçevelemesi
- Kayan Pencerelerde Hareketli Ortalamalar
- Birikimli Dağılım ve Toplamın Yüzdesi