Having cümleciği ile grup kriterleri tanımlanır, gruplanmış kolonlardaki veriler where cümleciği ile filtrelenemez, bunun yerine having cünleciği kullanılır.
Örneğin, öğrenciler tablosu aşağıdaki gibi olsun. +-----+-----+------+ | id | adi |notu | +-----+-----+------+ | 123 |Veli |60 | | 124 |Veli |70 | | 125 |Ali |80 | | 126 |Ali |30 | | 127 |Hasan|61 | +-----+-----+------+ not ortalaması 60 dan büyük olan öğrencileri bulmak isteyelim. mysql> SELECT adi, AVG(notu) FROM ogrenciler GROUP BY adi HAVING AVG(notu) > 60 +-----+------+ | adi |notu | +-----+------+ |Hasan|61 | |Veli |65 | +-----+------+
Merhaba,
dostum ben şöyle bir sorgu kullandım çalıştı ?
SELECT p. * , ptc.category_id
FROM product_to_category AS ptc
JOIN products AS p ON ( ptc.product_id = p.product_id )
WHERE p.product_id = ’48′
GROUP BY p.product_id
LIMIT 0 , 30
gördüğün gibi p.product_id ye göre guruplama yapıyorum. ve yine bu alan için WHERE kullanıyorum
dedimki acaba JOIN kullandığım içinmi oldu ve şöyle bir sorgu cümleciği yazdım.
SELECT * FROM product_to_category WHERE category_id = ’6′ GROUP BY category_id
yine çalıştı.
Çalıştıdan kastım sonuç döndürüyor hata vermiyor.
Acaba mysql sürümündenmi kaynaklanıyor
Kullandığım mysql sürümü 5.0.51
Bu konuda beni aydınlatırsan teşekkür ederim.
Saygılar.
where ile belirtiğin koşuldan dönen sonuçların guplanması lazım senin yazdığın şekilde.
Bu having sözcüğünün kullanımı bir kaç kolon üzerindeki işlemin sorgulanmasında kullanılmak üzere tasarlanmıştır düşüncesindeyim.Mesela öğrencinin 123 kodlu dersten 3 notu olduğunu düşünürsek;
select adi
from ogrenciler
group by adi
having ((((notu1+notu2)*40)+(notu3*60))/100)>50
gibi olması mantık dahili değil midir?
hayır, having cümleciği fonksiyon ile çekilen verileri filtrelemek için kullanılır.Yani Where cümleciği gibi. Ancak Where cümleciği fonksiyonlar ile kullanılmamaktadır.