Farkındayım başlık çok uzun oldu ???? Ancak benim işime yaradığı gibi bir gün sizinde işinize yarayabilir. Şimdi örnek vermek gerekirse, yorumlar tablonuz olsun. Yorumların bazıları onaylı, bazıları onaysız olarak kayıt edilmiş. Ve siz toplam yorum sayısını, onaylı yorum sayısını ve onay bekleyen yorum sayısını bir sorguda almak istiyorsunuz. Mantıken nasıl yaparsınız? Ya subquery kullanırsınız ya da bunun yerine SUM() fonksiyonun kullanırsınız. Hemen bir örnek verelim.
Eğer count() fonksiyonunu kullanırsak;
SELECT count(yorum_id) toplam FROM yorumlar;
Sonuç;
+--------+ | toplam | +--------+ | 2052 | +--------+
Şimdi SUM() fonksiyonu ile birlikte şöyle bir kullanım yapacağız. Örneğin onay 1 ise onaylı yorumları, 0 ise onaysız yorumları saydıracağız.
SELECT count(yorum_id) toplam, SUM(onay = 1) onayli_yorumlar, SUM(onay = 0) onaysiz_yorumlar FROM yorumlar
Sonuç;
+--------+-----------------+------------------+ | toplam | onayli_yorumlar | onaysiz_yorumlar | +--------+-----------------+------------------+ | 2052 | 1 | 2051 | +--------+-----------------+------------------+
Son olarak, eğer birden fazla tabloyu join ile bağladıktan sonra count işlemi yaptığınızda rakamlar saçmalıyorsa DISTINCT ile benzersizleri toplamak gerekir. Ama onun kullanımı biraz daha karışık, şöyle bir kullanım gerektiriyor;
SELECT count(yorum_id) toplam, REPLACE(SUM(onay = 1) * count(DISTINCT yorum_id) / count(*), '.0000', '') onayli_yorumlar, REPLACE(SUM(onay = 0) * count(DISTINCT yorum_id) / count(*), '.0000', '') onaysiz_yorumlar FROM yorumlar INNER JOIN ...
Bu yazım bu kadardı, bir gün böyle birşeye ihtiyaç olursa zaten takıldığınız noktada yorum yazarsınız. Kolay gelsin ????