UNNEST ve Toplama
Dizileri satırlara ve yeniden dizilere dönüştürün.
UNNEST ve Toplama, CoddyKit'te ücretsiz bir SQL Academy 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, 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.
UNNEST Nedir
PostgreSQL, dizileri tek bir sütun içinde saklamanıza izin verir. Ancak bazen her elemanla ayrı ayrı çalışmanız gerekir; işte burada UNNEST devreye girer.
UNNEST, bir diziyi her eleman için bir satır olacak şekilde satır kümesine genişleten, küme döndüren bir işlevdir. Bunu toplulaştırmanın tersi olarak düşünebilirsiniz: birçok satırı tek satırda birleştirmek yerine, tek bir değeri çok sayıda satıra açar.
Temel UNNEST Örneği
UNNEST'in en basit kullanımı, doğrudan bir dizi sabiti geçirmektir. Her eleman sonuç kümesinde kendi satırı olur.
Burada düz bir tamsayı dizisini ayrı satırlara genişletiyoruz:
SELECT UNNEST(ARRAY[10, 20, 30, 40]) AS value;Metin Dizileriyle UNNEST
UNNEST, metin de dahil olmak üzere herhangi bir dizi türüyle çalışır. Bu, etiketleri, kategorileri veya PostgreSQL dizisi olarak kodlanmış virgülle ayrılmış tarzda verileri saklayan bir sütununuz olduğunda kullanışlıdır.
SELECT UNNEST(ARRAY['apple', 'banana', 'cherry']) AS fruit;Tablo Sütunundan UNNEST
UNNEST'in asıl gücü, onu gerçek bir tablo sütununda kullandığınızda ortaya çıkar. Tablodaki her satır farklı uzunlukta bir dizi içerebilir ve UNNEST bunların tümünü ayrı satırlara genişletir.
Bu örnekte products tablosunda bir tags metin dizisi sütunu vardır:
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name TEXT,
tags TEXT[]
);
INSERT INTO products (name, tags) VALUES
('Laptop', ARRAY['electronics', 'computing', 'portable']),
('Shirt', ARRAY['clothing', 'casual']),
('Blender', ARRAY['kitchen', 'electronics']);
SELECT name, UNNEST(tags) AS tag
FROM products;Etiket Görülme Sayılarını Hesaplama
Bir dizi sütununu satırlara açtıktan sonra sonuçları diğer satırlar gibi ele alabilir ve toplulaştırma işlevlerini uygulayabilirsiniz. Burada her etiketle ilişkilendirilmiş kaç ürün olduğunu sayıyoruz.
Kalıp şudur: bir alt sorguda veya CTE içinde UNNEST, ardından satırlara açılmış değer üzerinde GROUP BY:
SELECT tag, COUNT(*) AS product_count
FROM (
SELECT UNNEST(tags) AS tag
FROM products
) AS expanded
GROUP BY tag
ORDER BY product_count DESC;ORDINALITY ile UNNEST
Bazen bir elemanın dizi içindeki konumu önemlidir. PostgreSQL, genişletilen her elemana bir satır numarası eklemek için WITH ORDINALITY sağlar; böylece dizideki özgün indisini (1 tabanlı) bilirsiniz.
SELECT val, pos
FROM UNNEST(ARRAY['first', 'second', 'third']) WITH ORDINALITY AS t(val, pos);Bir Tabloda ORDINALITY Kullanma
WITH ORDINALITY, bir dizide sıralı listeler sakladığınızda özellikle yararlıdır. Örneğin, parça sırasının önemli olduğu bir çalma listesi tablosu:
CREATE TABLE playlists (
id SERIAL PRIMARY KEY,
title TEXT,
tracks TEXT[]
);
INSERT INTO playlists (title, tracks) VALUES
('Morning Mix', ARRAY['Song A', 'Song B', 'Song C']);
SELECT p.title, track, position
FROM playlists p,
UNNEST(p.tracks) WITH ORDINALITY AS t(track, position)
ORDER BY p.id, position;UNNEST Sonrasında Filtreleme
UNNEST dizi elemanlarını satırlara dönüştürdüğü için onları normal bir WHERE yan tümcesiyle filtreleyebilirsiniz. Bu, dizi içerme operatörünü kullanmadan dizisi belirli bir değer içeren tüm satırları bulmanızı sağlar.
SELECT DISTINCT name
FROM products,
UNNEST(tags) AS tag
WHERE tag = 'electronics';Yeniden Diziye Toplama
UNNEST'in tersi ARRAY_AGG'dir. Satırları genişletip dönüştürdükten veya filtreledikten sonra sonuçları yeniden bir dizi içinde toplayabilirsiniz. Bu gidiş-dönüş kalıbı — diziyi açma, işleme, yeniden toplulaştırma — yaygın bir PostgreSQL deyimidir.
SELECT ARRAY_AGG(tag ORDER BY tag) AS sorted_tags
FROM (
SELECT UNNEST(ARRAY['cherry', 'apple', 'banana']) AS tag
) AS t;Dizi Öğelerini Tekilleştirme
unnest-toplama gidiş-dönüşünün pratik kullanım alanlarından biri, bir dizideki yinelenen öğeleri kaldırmaktır. Diziyi UNNEST ile açın, DISTINCT uygulayın ve ardından ARRAY_AGG ile yeniden toplayın:
SELECT ARRAY_AGG(DISTINCT tag ORDER BY tag) AS unique_tags
FROM UNNEST(ARRAY['sql', 'database', 'sql', 'postgresql', 'database']) AS tag;Birden Çok Dizi Sütununu Birleştirme
FROM yan tümcesinde birden çok diziyi paralel olarak UNNEST edebilirsiniz. PostgreSQL, öğeleri konumlarına göre eşleştirir. Dizilerin uzunlukları farklıysa kısa olan dizi, uzun dizinin fazladan konumları için NULL değerleri üretir.
SELECT key, value
FROM UNNEST(
ARRAY['name', 'city', 'role'],
ARRAY['Alice', 'Istanbul', 'DBA']
) AS t(key, value);Bilgi Kontrolü
PostgreSQL'de UNNEST işlemini ve dizileri toplama konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste, PostgreSQL'in yerleşik işlevlerini kullanarak dizileri satırlara ve yeniden dizilere dönüştürmeyi öğrendiniz:
- UNNEST — bir diziyi her öğe için bir satır olacak şekilde genişletir; hem sabit değerlerle hem de tablo sütunlarıyla çalışır.
- WITH ORDINALITY — açılan her öğeye konumsal bir dizin ekler; böylece öğenin dizideki özgün sırasını bilirsiniz.
- Süzme — diziyi açtıktan sonra, normal satırlarda olduğu gibi WHERE kullanabilirsiniz.
- ARRAY_AGG — UNNEST işleminin tersidir; satırları yeniden bir dizide toplar ve isteğe bağlı olarak ORDER BY veya DISTINCT ile kullanılabilir.
- Paralel UNNEST — FROM yan tümcesindeki birden çok dizi yan yana açılır ve konumlarına göre eşleştirilir.
Bu unnest-işleme-yeniden toplama kalıbında uzmanlaşmanız, dizi verilerini SQL'in tüm ifade gücüyle işlemenizi sağlar.
Sıkça Sorulan Sorular
“UNNEST ve Toplama” dersi ücretsiz mi?
Evet — “UNNEST ve Toplama” 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.
“UNNEST ve Toplama” dersinde ne öğreneceğim?
Dizileri satırlara ve yeniden dizilere dönüştürün. 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 3. dersidir.
“UNNEST ve Toplama” 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
- Dizi Sütunlarının Temelleri
- Dizilerin İçinde Arama
- UNNEST ve Toplama
- Diziler ve Normalleştirilmiş Tablolar