0Pricing
SQL Academy · Ders

Çapraz Tablo Kalıpları (PostgreSQL crosstab())

tablefunc uzantısının crosstab() işleviyle gerçek özet tablolar oluşturun.

Çapraz Tablo Kalıpları (PostgreSQL crosstab()), CoddyKit'te ücretsiz bir SQL Academy 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, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.

Gerçek crosstab Neden?

CASE pivotları her hedef sütunu listelemenizi gerektirir. Gerçekten geniş pivotlar için (ör. ürün başına bir sütun) tablefunc uzantısının crosstab() işlevi kullanılacak araçtır.

Uzantıyı Etkinleştirme

tablefunc, PostgreSQL contrib ile birlikte gelir:

CREATE EXTENSION IF NOT EXISTS tablefunc;

Temel crosstab İmzası

crosstab, üç sütunlu bir SQL dizesi (satır anahtarı, kategori, değer) alır ve satır anahtarıyla birlikte her kategori için bir sütun döndürür:

SELECT * FROM crosstab(
  $$
    SELECT user_id, status, COUNT(*)::INT
    FROM orders
    GROUP BY user_id, status
    ORDER BY user_id, status
  $$
) AS ct (
  user_id BIGINT,
  paid    INT,
  pending INT,
  cancelled INT
);

Çıktı Sütunlarını Neden Bildirirsiniz

SQL statik türlemelidir — planlayıcı, ayrıştırma sırasında çıktı sütunlarına ihtiyaç duyar. Bu nedenle veri türleri de dahil olmak üzere şemayı AS yan tümcesinde belirtirsiniz.

İki Bağımsız Değişkenli crosstab (Kategori Kümesiyle)

Seyrek veriler için kategori listesini ayrı olarak sağlayın; böylece eksik değerler yanlış hizalanmak yerine NULL olur:

SELECT * FROM crosstab(
  $$
    SELECT user_id, status, COUNT(*)::INT
    FROM orders GROUP BY user_id, status
    ORDER BY user_id
  $$,
  $$ VALUES ('paid'), ('pending'), ('cancelled') $$
) AS ct (
  user_id BIGINT, paid INT, pending INT, cancelled INT
);

CASE crosstab'dan Ne Zaman Daha İyidir

Bilinen ve küçük bir kategori kümesi için CASE/FILTER daha basittir — uzantı gerekmez, iki bağımsız değişkenli kullanımın incelikleri yoktur. crosstab'ı şu durumlarda kullanın:

  • Çok sayıda kategoriniz varsa
  • Kategoriler dinamik olarak yükleniyorsa
  • Harici bir pivot tüketicisi için veri üretiyorsanız

Dinamik Pivotlamalar

Çalışma zamanında bilinmeyen kategoriler için SQL'i uygulamanızda üretin veya format() + EXECUTE ile PL/pgSQL kullanın.

-- Build the SQL dynamically:
SELECT string_agg(format('SUM(CASE WHEN status = %L THEN 1 END) AS %I',
                          status, status), ', ')
FROM (SELECT DISTINCT status FROM orders) s;

Hesap Tabloları için Geniş Pivotlama

Analistler için hazırlanan raporlar genellikle geniş biçim ister. Bunu SQL'de üretin veya uzun biçimi doğrudan BI aracına aktararak pivotlamayı ona bırakın.

Tersine Pivotlama

Geniş biçimden → uzun biçime geçmek için UNION ALL veya PostgreSQL'in jsonb_each_text() işlevini kullanın:

SELECT id, key AS month, (value)::NUMERIC AS revenue
FROM monthly_wide,
     jsonb_each_text(to_jsonb(monthly_wide) - 'id');

Performans

crosstab(), iç SQL'i bir kez çalıştırır ve bellekte pivotlar. Darboğaz, normal bir GROUP BY sorgusundakiyle aynıdır.

crosstab Sınırlamaları

PostgreSQL'de Oracle/SQL Server'dakinin aksine yerel bir PIVOT anahtar sözcüğü yoktur. crosstab() bunun için kullanılan çözümdür.

Özet

Çoğu pivotlama için CASE/FILTER temiz çözümdür. Kategoriler çok sayıdaysa veya önceden bilinmiyorsa crosstab() aracını kullanın.

Hızlı Kontrol

PostgreSQL'in crosstab() işlevini hangi uzantı sağlar?

Sıkça Sorulan Sorular

“Çapraz Tablo Kalıpları (PostgreSQL crosstab())” dersi ücretsiz mi?

Evet — “Çapraz Tablo Kalıpları (PostgreSQL crosstab())” 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 SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.

“Çapraz Tablo Kalıpları (PostgreSQL crosstab())” dersinde ne öğreneceğim?

tablefunc uzantısının crosstab() işleviyle gerçek özet tablolar oluşturun. SQL Academy 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.

SQL Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Academy, 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.

“Çapraz Tablo Kalıpları (PostgreSQL crosstab())” 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 SQL Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Academy 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. UNION, INTERSECT, EXCEPT
  2. UNION ALL ve UNION Karşılaştırması (Tekilleştirme Maliyeti)
  3. CASE İfadeleri ve Özet Tablo Sorguları
  4. Çapraz Tablo Kalıpları (PostgreSQL crosstab())
← SQL Academy Sayfasına Dön