Ana içeriğe geç
Kesit SQL
Orta · İleri Sorgu Yapıları

Geniş tablodan uzun tabloya: UNPIVOT

Sütunlara yayılmış ölçümleri satırlara çevirmek: UNION ALL, sabit liste ile CROSS JOIN, SQL türlerine özgü UNPIVOT ve uzun formatın analizdeki faydası.

Uygulamada aç, 5 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Neden uzun format?

Lezzet Kurye değerlendirmelerinde iki puan iki ayrı sütunda durur: food_score ve courier_score. “Hangi puan türünün ortalaması daha düşük?”, “Her puan türünde 1 verenlerin oranı?” gibi sorular, puanlar tek sütunda ve türü ayrı bir sütunda olduğunda tek bir GROUP BY ile cevaplanır. Görselleştirme araçları da çoğunlukla uzun format ister.

order_idfood_scorecourier_score
1254

↓

order_idturpuan
12yemek5
12kurye4

Yol 1: UNION ALL (her yerde çalışır)

SELECT order_id, 'yemek' AS tur, food_score AS puan FROM lk_ratings
UNION ALL
SELECT order_id, 'kurye', courier_score FROM lk_ratings;

Tabloyu her sütun için bir kez okur. Sütun sayısı azsa en okunur yoldur.

Yol 2: sabit listeyle CROSS JOIN

SELECT r.order_id, t.tur,
       CASE t.tur WHEN 'yemek' THEN r.food_score ELSE r.courier_score END AS puan
FROM lk_ratings r
CROSS JOIN (SELECT 'yemek' AS tur UNION ALL SELECT 'kurye') t;

Tabloyu bir kez okur; her satırı tür sayısı kadar çoğaltıp CASE ile doğru sütunu seçer.

Yol 3: SQL türüne özgü operatörler

NULL'lara dikkatSQL Server ve Oracle UNPIVOT, değeri NULL olan satırları varsayılan olarak atar; UNION ALL yöntemi ise korur. Sayımlar bu yüzden farklı çıkabilir.
Alıştırmalara geç (5)