PostgreSQL - SAHİP OLMA
HAVING yan tümcesi, işlevin sonucunun bazı koşulları karşıladığı belirli satırları seçmemizi sağlar.
WHERE yan tümcesi koşulları seçili sütunlara yerleştirirken HAVING yan tümcesi, koşulları GROUP BY yan tümcesi tarafından oluşturulan gruplara yerleştirir.
Sözdizimi
Aşağıda HAVING yan tümcesinin bir SELECT sorgusundaki konumu verilmiştir -
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
HAVING yan tümcesi, bir sorgudaki GROUP BY yan tümcesini izlemeli ve kullanılıyorsa ORDER BY yan tümcesinden önce gelmelidir. Aşağıda HAVING yan tümcesi de dahil olmak üzere SELECT ifadesinin sözdizimi verilmiştir -
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2
Misal
Aşağıdaki gibi kayıtlara sahip ŞİRKET tablosunu düşünün :
# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
Aşağıdaki, ad sayısı 2'den az olan kaydı görüntüleyen bir örnektir -
testdb-# SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) < 2;
Bu, aşağıdaki sonucu verecektir -
name
-------
Teddy
Paul
Mark
David
Allen
Kim
James
(7 rows)
Şimdi, aşağıdaki INSERT ifadelerini kullanarak COMPANY tablosunda üç kayıt daha oluşturalım -
INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00);
INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00);
INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00);
Şimdi, tablomuzda yinelenen adlara sahip aşağıdaki kayıtlar var -
id | name | age | address | salary
----+-------+-----+--------------+--------
1 | Paul | 32 | California | 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
8 | Paul | 24 | Houston | 20000
9 | James | 44 | Norway | 5000
10 | James | 45 | Texas | 5000
(10 rows)
Aşağıdaki, ad sayısı 1'den büyük olan kaydı görüntüleyen örnektir -
testdb-# SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) > 1;
Bu, aşağıdaki sonucu verecektir -
name
-------
Paul
James
(2 rows)