Sütunları Satırlara Dönüştürme
Geniş tabloları UNPIVOT veya UNION ALL ile tersine çevirme.
Sütunları Satırlara Dönüştürme, CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 3. 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.
Tersine Dönüştürme Sorunu
Çapraz tabloyu satırlara dönüştürme, çapraz tabloya dönüştürmenin ayna görüntüsüdür: bir geniş tabloyu alıp sütunlarını yeniden satırlara dönüştürürsünüz. Görüşmeciler bunu, veriler elektronik tablo biçiminde geldiğinde ancak analiz için normalleştirilmesi gerektiğinde sorar.
Örneğin, bölge başına q1, q2, q3, q4 sütunları bulunan bir tablo, (region, quarter, amount) satırlarına dönüştürülmelidir. Bu uzun biçim, toplama, birleştirme ve grafik oluşturma işlemlerinin tümünün tercih ettiği biçimdir.
-- Wide input we want to unpivot
region | q1 | q2 | q3 | q4
-------+-----+-----+-----+----
East | 100 | 150 | 120 | 180
West | 200 | 250 | 210 | 260Taşınabilir UNION ALL Kalıbı
Veritabanı lehçesinden bağımsız yanıt UNION ALL kullanmaktır: her kaynak sütunu için bir SELECT yazın; her biri bir sabit etiket ve ilgili sütunun değerini üretmelidir.
Yinelenenleri kaldırma maliyetine katlanmamak ve iki hücre aynı değeri taşısa bile her satırı korumak için UNION yerine UNION ALL kullanın.
SELECT region, 'Q1' AS quarter, q1 AS amount FROM wide_sales
UNION ALL
SELECT region, 'Q2', q2 FROM wide_sales
UNION ALL
SELECT region, 'Q3', q3 FROM wide_sales
UNION ALL
SELECT region, 'Q4', q4 FROM wide_sales;Neden UNION Değil, UNION ALL?
Bu, klasik bir mülakat tuzağıdır. UNION, tüm sonuç genelindeki yinelenen satırları kaldırır. East ve West bölgelerinde Q1 için 100 varsa, basit UNION aynı satırları birleştirir ve veri kaybedersiniz.
UNION ALL, yinelenenleri kaldırmadan birleştirme yapar; çapraz tabloyu satırlara dönüştürmenin gerektirdiği de budur. Ayrıca yinelenenleri kaldırmak için sıralama veya karma işlemi gerekmediğinden daha hızlıdır.
-- UNION would wrongly merge identical (region, quarter, amount) rows
-- UNION ALL keeps every row, always the correct choice hereSütun Türlerinin Uyumu
UNION ALL içindeki her dal, aynı sayıda sütunu, aynı sırada ve uyumlu türlerle üretmelidir. Sütun adları ilk SELECT ifadesinden alınır.
Geniş tablonuzdaki sütunların türleri farklıysa (örneğin biri int, diğeri decimal ise) altyapı ortak bir tür seçer. Türler gerçekten uyumsuzsa, birleştirmenin başarısız olmaması için tür dönüşümünü açıkça belirtin.
SELECT region, 'revenue' AS metric, CAST(revenue AS decimal(12,2)) AS val FROM t
UNION ALL
SELECT region, 'units', CAST(units AS decimal(12,2)) FROM t;SQL Server UNPIVOT
SQL Server'da UNION ALL'dan daha kısa olan özel bir UNPIVOT işleci bulunur. Yeni değer sütununu ve yeni etiket sütununu adlandırır, ardından katlanacak kaynak sütunları listelersiniz.
Önemli bir davranış şudur: UNPIVOT, değerin NULL olduğu satırları çıktıdan kaldırır. Görüşmeciler bu yan etkiyi bilip bilmediğinizi sınar.
SELECT region, quarter, amount
FROM wide_sales
UNPIVOT (
amount FOR quarter IN (q1, q2, q3, q4)
) AS u;UNPIVOT NULL Değerleri Atar
Bir bölgede q3 değeri NULL ise SQL Server'ın UNPIVOT işleci bu satırı çıktıdan tamamen çıkarır. NULL değerlerden bağımsız olarak her sütun için bir satıra ihtiyacınız varsa, bunları koruyan UNION ALL seçeneğine dönün.
Bu ödünleşimi bir mülakatta belirtin: yerleşik UNPIVOT kısadır ancak NULL değerlerde kayba yol açar; UNION ALL uzundur ancak eksiksizdir.
-- UNPIVOT: q3 NULL for East -> no (East, Q3) row produced
-- UNION ALL: (East, 'Q3', NULL) row IS producedPostgreSQL: LATERAL VALUES
PostgreSQL'de UNPIVOT yoktur; ancak düzenli bir kalıp, bir VALUES listesi üzerinde CROSS JOIN LATERAL kullanmaktır. Her geniş tablo satırı, (etiket, değer) çiftlerinden oluşan küçük bir satır içi tabloyla genişletilir.
Bu yöntem uzun bir UNION ALL ifadesinden daha temizdir ve kaynak tabloyu yalnızca bir kez okur.
SELECT w.region, v.quarter, v.amount
FROM wide_sales w
CROSS JOIN LATERAL (VALUES
('Q1', w.q1),
('Q2', w.q2),
('Q3', w.q3),
('Q4', w.q4)
) AS v(quarter, amount);Tabloyu Bir Kez Okuma
Belirtmeye değer bir performans noktası vardır: basit UNION ALL geniş tabloyu her dal için bir kez tarar (dört çeyrek için dört tarama). LATERAL VALUES biçimi ve SQL Server UNPIVOT işleci kaynak tabloyu bir kez okur.
Büyük tablolarda bu önemlidir. UNION ALL kullanmanız gerekiyorsa bir iyileştirici yine de tabloyu tekrar tekrar tarayabilir; bu nedenle daha verimli seçenekler olarak LATERAL veya UNPIVOT'tan söz edin.
Boş Hücreleri Filtreleme
UNION ALL veya LATERAL kullandığınızda NULL değer içeren satırları korursunuz. Soruda yalnızca dolu hücreler isteniyorsa bir filtre ekleyin. Bu, SQL Server UNPIVOT işleminin otomatik olarak yaptığı işlemi taklit eder.
NULL değerleri koruyup korumama kararı bir değerlendirme meselesidir; bu nedenle kod yazmadan önce gereksinimi görüşmeciyle netleştirin.
SELECT region, quarter, amount
FROM (
SELECT region, 'Q1' AS quarter, q1 AS amount FROM wide_sales
UNION ALL SELECT region, 'Q2', q2 FROM wide_sales
) t
WHERE amount IS NOT NULL;Uygulamalı Örnek: Sütunları Satırlara Dönüştürdükten Sonra Toplama
Yaygın bir devam sorusu şudur: "Geniş çeyreklik tablodan tüm çeyrekler boyunca bölge başına toplam geliri verin." Uzun biçime dönüştürdükten sonra toplama işlemi oldukça basittir: bölgeye göre gruplanmış tek bir SUM.
Bu, önce sütunları satırlara dönüştürmenin asıl nedenini gösterir. Dört ayrı sütunu toplamak kırılgandır; ancak uzun biçimdeki SUM(amount) GROUP BY region, çeyrek sayısı ne olursa olsun ölçeklenebilir.
WITH long_sales AS (
SELECT region, 'Q1' AS quarter, q1 AS amount FROM wide_sales
UNION ALL SELECT region, 'Q2', q2 FROM wide_sales
UNION ALL SELECT region, 'Q3', q3 FROM wide_sales
UNION ALL SELECT region, 'Q4', q4 FROM wide_sales
)
SELECT region, SUM(amount) AS total
FROM long_sales
GROUP BY region;Sütunları Ne Zaman Satırlara Dönüştürmeli
Bir kelime probleminde sütunları satırlara dönüştürme işaretlerini tanıyın:
- Girişte, aslında değerleri (aylar, yıllar, ölçümler) içeren yinelenen sütunlar bulunur.
- Bu değerler üzerinden toplama yapmanız, birleştirmeniz veya grafik oluşturmanız gerekir.
- İçe aktarma sırasında normalleştirilmemiş elektronik tablo verilerini normalleştirmek istersiniz.
Uzun biçim, sonraki SQL çalışmaları için neredeyse her zaman doğru şekildir; bu nedenle sütunları satırlara dönüştürmek sık kullanılan bir ilk adımdır.
Hızlı Kontrol
Sütunları satırlara dönüştürürken en sık yapılan hatayı bildiğinizi doğrulayın.
Özet
Bu işlem sütunları satırlara dönüştürür:
- Taşınabilir: her sütun için bir
SELECTsorgusu yazılır ve bunlarUNION ALLile birleştirilir (düz UNION asla kullanılmaz). - SQL Server: yerleşik
UNPIVOT; kısa ve özdür, ancak NULL değerlerini düşürür. - PostgreSQL:
CROSS JOIN LATERAL (VALUES ...); tek tarama yapar. - Sorgu kollarındaki sütun sayılarını ve türlerini hizalayın; soru gerektiriyorsa NULL değerlerini filtreleyin.
Yapay zeka eğitmeniyle Coding Interview Prep öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 90
- Dersler
- 360
Sıkça Sorulan Sorular
“Sütunları Satırlara Dönüştürme” dersi ücretsiz mi?
Evet — “Sütunları Satırlara Dönüştü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 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.
“Sütunları Satırlara Dönüştürme” dersinde ne öğreneceğim?
Geniş tabloları UNPIVOT veya UNION ALL ile tersine çevirme. 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 3. dersidir.
“Sütunları Satırlara Dönüştü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 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
- Koşullu Toplama ile Döndürme
- Üreticiye Özgü PIVOT ve Çapraz Tablo Sözdizimi
- Sütunları Satırlara Dönüştürme
- Bilinmeyen Sütunlarla Dinamik Döndürme