Ana içeriğe geç
Kesit SQL
İleri · SQL Türlerine Özgü

PostgreSQL'e özgü güçlü özellikler

::, ILIKE, FILTER, DISTINCT ON, RETURNING, generate_series, diziler ve JSONB.

Uygulamada aç, 3 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ç.

PostgreSQL'in sevilen kısayolları

SELECT name,
       price::int AS tam_fiyat,
       DATE_TRUNC('month', DATE '2024-05-17')::date AS ay_basi
FROM products
WHERE name ILIKE '%set%';

FILTER ile koşullu toplama

SELECT channel,
       COUNT(*) AS toplam,
       COUNT(*) FILTER (WHERE status = 'cancelled') AS iptal,
       ROUND(100.0 * COUNT(*) FILTER (WHERE status = 'cancelled') / COUNT(*), 1) AS iptal_yuzde
FROM orders
GROUP BY channel;

DISTINCT ON: grup başına ilk satır

-- Her müşterinin son siparişi (PostgreSQL'e özgü)
SELECT DISTINCT ON (customer_id) customer_id, order_id, order_date
FROM orders
ORDER BY customer_id, order_date DESC;

Diğer SQL türlerinde bunun karşılığı ROW_NUMBER() ... = 1 kalıbıdır.

generate_series ve diziler

SELECT d::date AS gun
FROM generate_series(DATE '2024-12-01', DATE '2024-12-31', INTERVAL '1 day') AS d;
SELECT ARRAY_AGG(name ORDER BY price DESC) AS urunler FROM products WHERE category = 'Spor';
SELECT * FROM products WHERE category = ANY(ARRAY['Kitap', 'Spor']);
Neden bu kadar popüler?Açık kaynak, standarda en sadık SQL türü; JSONB, tam metin arama, coğrafi veri (PostGIS), vektör arama (pgvector) gibi eklentilerle neredeyse her işi görür. Bu taklitte DISTINCT ON ve generate_series çalışır; dizi türü (ARRAY, ANY) çalışmaz, o kutuyu başvuru olarak kullan.
Alıştırmalara geç (3)