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%';
x::tip: CAST kısaltması.ILIKE: Büyük/küçük harf duyarsız LIKE.DATE_TRUNC: Tarihi ay/yıl/hafta başına yuvarlar.
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.