Skip to main content

PostgreSQL'de FILTER İfadesi

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;


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

Popular posts from this blog

PostgreSQL High Availability - Patroni 2

Patroni kurulumuyla ilgili oldukça fazla kaynak bulunmakta fakat kurulum ve yönetimini beraber barındıran kaynağa denk gelmedim. Bu yazıda hem Patroni kurulumu hem de kurulum sonrası yönetimiyle alakalı detaylara ulaşabilirsiniz. PostgreSQL cluster'larının yönetimi için kullanılan Patroni ile ilgili temel bilgilerin yer aldığı Autofailover üzerine hazırladığım yazı serisine aşağıdaki linklerden erişebilirsiniz. PostgreSQL ve Autofailover PostgreSQL'de Autofailover ve Patroni 1 (Giriş) PostgreSQL'de Autofailover ve Patroni 2 (Kurulum, Konfigürasyon ve Yönetim) PostgreSQL'de Autofailover ve Patroni 3 (Mevcut PostgreSQL Cluster'inin Patroni'ye Geçirilmesi) Patroni, PostgreSQL veritabanlarının kurulumundan ve konfigürasyonundan sorumludur. Yani Patroni'yi kurduğumuz sunucular aynı zamanda Patroni ile kurulmuş PostgreSQL'leri barındıracak. Üç node'lu PostgreSQL ve üç node'lu ETCD cluster'larını oluşturacağım. Kuruluma önce üç no...

PostgreSQL High Availability - Patroni 1

Patroni, PostgreSQL HA (High Availability) Cluster yapısının kurulması ve yönetimi için kullanılan open source bir araçtır. Patroni, PostgreSQL Cluster’inin kurulumu (bootstrap), replikasyonunun kurulumu, PostgreSQL otomatik failover yapılması amacıyla kullanılır. Python ile yazılmıştır. Bir önceki yazıda PostgreSQL'de Autofailover araçlarının ne olduğu ve neden Autofailover'a gereksinim duyulduğu konusunda yazı paylaşmıştım. Yazıya buradan ulaşabilirsiniz. Patroni Kurulumu İçin Gereksinimler nedir? Patroni’nin tek başına kurulumu autofailover yapısını yapılandırmak için yeterli değildir. Patroni ile Autofailover yapısının kurulması için DCS (Distributed Configuration Store) araçlarından birine ihtiyaç vardır. Bunlardan bazıları; ETCD, Consul, ZooKeeper, Kubernetes. PostgreSQL üzerinde Autofailover araçlarından Patroni entegre edecekseniz DCS araçlarından birini kullanmanız gerekecek. DCS dediğimiz şey aslında Service Discovery araçlarından biri olduğundan bu iki tan...

pg_ctl: command not found

Hi, If you can not reach pg_ctl command in bash also you are sure this command exists in your server, check $PATH. -bash-4.2$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin So, the directory of pg_ctl is not seem in PATH. Input directory of pg_ctl and check it then run it.