Merhaba,
FILTER ifadesinin kullanımını anlatmadan önce PostgreSQL'de Aggregate ifadesini ve Aggregate fonksiyonlarını biraz açıklayalım.
Sorgularda istenilen bir alan için gruplama yaparak sonucunu toplama, sayma, en büyük, en küçük değerlerine ait sonuca ulaşmak istendiğinde aggregate fonksiyonlarını kullanmamız gerekir.
PostgreSQL'de kullanılan Aggregate fonksiyonlarının bir kaçı aşağıdaki gibidir.
SUM() - Değerleri toplar.
COUNT() - Değerleri sayar.
AVG() - Sütun değerinin ortalamasını bulur.
MIN() - En küçük değeri bulur.
MAX() - En büyük değeri bulur.
FILTER ifadesi aggregate fonksiyonlarıyla birlikte kullanılır. Gruplanacak değer içinde filtreleme sağlar.
AGGREGATE_FUNCTION(hesaplamalar) FILTER (WHERE ifadesi)
şeklinde kullanılır.
COUNT(*) FILTER (WHERE ifadesi)
SUM(*) FILTER (WHERE ifadesi)
Örnek tablo oluşturalım.
create table users as
select
(ARRAY['Ahmet','Turan','Kaya','Beren'])[floor(random()*5)+1] as f_name,
(ARRAY['KAYA','GUNDUZ','SARIKAYA','ALTINTAS'])[floor(random()*5)+1] as l_name,
trunc(random()*10) as random_,
i+now()::date
from generate_series(1,100) as i;
Toplam sayıya COUNT() ile ulaştık. Kullanıcı bazlı toplam sayıya GROUP BY ile ulaşacağız.
Soyadı KAYA ve ALTINTAS olan kullanıcı sayılarını bulalım.
Sevgiler,
FILTER ifadesinin kullanımını anlatmadan önce PostgreSQL'de Aggregate ifadesini ve Aggregate fonksiyonlarını biraz açıklayalım.
Sorgularda istenilen bir alan için gruplama yaparak sonucunu toplama, sayma, en büyük, en küçük değerlerine ait sonuca ulaşmak istendiğinde aggregate fonksiyonlarını kullanmamız gerekir.
PostgreSQL'de kullanılan Aggregate fonksiyonlarının bir kaçı aşağıdaki gibidir.
SUM() - Değerleri toplar.
COUNT() - Değerleri sayar.
AVG() - Sütun değerinin ortalamasını bulur.
MIN() - En küçük değeri bulur.
MAX() - En büyük değeri bulur.
FILTER ifadesi aggregate fonksiyonlarıyla birlikte kullanılır. Gruplanacak değer içinde filtreleme sağlar.
AGGREGATE_FUNCTION(hesaplamalar) FILTER (WHERE ifadesi)
şeklinde kullanılır.
COUNT(*) FILTER (WHERE ifadesi)
SUM(*) FILTER (WHERE ifadesi)
Örnek tablo oluşturalım.
create table users as
select
(ARRAY['Ahmet','Turan','Kaya','Beren'])[floor(random()*5)+1] as f_name,
(ARRAY['KAYA','GUNDUZ','SARIKAYA','ALTINTAS'])[floor(random()*5)+1] as l_name,
trunc(random()*10) as random_,
i+now()::date
from generate_series(1,100) as i;
Users tablosundaki kayıt sayısına ulaşmak için COUNT() fonksiyonunu kullanalım.
Toplam sayıya COUNT() ile ulaştık. Kullanıcı bazlı toplam sayıya GROUP BY ile ulaşacağız.
Adı Ahmet olan 27 kullanıcı olduğunu görüyoruz. Tüm kullanıcılar arasında sadece soyadları KAYA olan kullanıcı bazında toplam sayıya ulaşmak için iki yol var. Biri FILTER kullanmak, diğerini ise bu örnek sonrasında bulabilirsiniz.
FILTER kullanarak soyadı KAYA olanların, isme göre gruplama yaparak bulmak istediğimizde sonuç aşağıdaki gibi değişecektir.
Aynı sonuca ulaşmak için CASE WHEN ifadesini de kullanabilirsiniz. Bu şekilde bazen sorgunuz biraz daha uzayabilir ve karmaşıklaşabilir. FILTER ifadesiyle sorguların daha okunaklı hale gelir.
Soyadı KAYA ve ALTINTAS olan kullanıcı sayılarını bulalım.
Sevgiler,
Comments
Post a Comment