Giriş
Having 'in uygulanma sırası şöyle.
Elimizde şöyle bir tablo olsun..
Şu iki cümle farklı şeylerdir. Bu örnekte her şey aggregate edildikten sonra HAVING ile süzme işlemi yapılıyor.
Having 'in uygulanma sırası şöyle.
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
Açıklaması şöyle.
The HAVING statement is used to filter data after it has been grouped by the GROUP BY statement.
Açıklaması şöyle.
The HAVING clause always applies to aggregated fields, which is all remaining columns post-aggregation.
Şeklen şöyle
COUNT
Örnek - count > 1Elimizde şöyle bir tablo olsun..
ID_a | ID_b | VAL
1 | 1 | 'a'
1 | 2 | 'b'
1 | 3 | 'a'
2 | 1 | 'a'
2 | 2 | 'c'
3 | 1 | 'c'
4 | 1 | 'c'
5 | 1 | 'b'
6 | 1 | 'e'
Aynı ID_a değerine sahip birden fazla olan ve farklı VAL değeri birden fazla olan sütunları bulmak isteyelim. Şöyle yaparız. Aggregate olarak count() kullanılıyor.select ID_a from my_table group by ID_a
having count(*)>1
and count(distinct VAL) > 1
Örnek - count = 6
Şöyle yaparız
SELECT institution_no FROM table WHERE cred_type in (1,2,3,4,5,6) GROUP BY institution_no HAVING COUNT(distinct cred_type) = 6;
Örnek - CTE ile count
CTE ile şöyle yaparız
WITH CTE as ( SELECT DISTINCT institution_no, cert_type FROM credentialing WHERE cert_type IN (1,2) ) SELECT institution_no, COUNT(institution_no) FROM cte GROUP BY institution_no HAVING COUNT(institution_no) = 2;
SUM
Örnek
Şöyle yaparız. Aggregate olarak sum() kullanılıyor.
SELECT customer_id,SUM (amount) FROM payment GROUP BY customer_idHAVING SUM (amount) > 200;
Örnek
Şöyle yaparız.
SELECT customer_id, SUM(quantity) AS total_quantityFROM orders GROUP BY customer_id HAVING SUM(quantity) >= 50;
WHERE yerine HAVING
SELECT id, filedate, SUM(amount)
FROM Sales
GROUP BY id, filedate
HAVING id = 123 AND filedate = '1/1/2018'
Bu örnekte ise önce WHERE ile süzme işlemi yapılıyor ve daha sonra gruplama yapılıyor.SELECT id, filedate, SUM(amount)
FROM Sales
WHERE id = 123 AND filedate = '1/1/2018'
GROUP BY id, filedate
Hiç yorum yok:
Yorum Gönder