alanınız grup kriteri olarak verilmemiş. Bu nedenle daha where / having e kadar gidemiyorsunuz. Ya bir aggregate fonksiyonla kullanmalı ya da group by a eklemelisiniz.
select alan_adi, count(*) from tablo
group by alan_adi
having count(*) > 5
burada da count(*) group by da verilen bir alan değil. Tüm kayıtlarda arıyorsunuz. Diyelim ki alan_adi 'De' ile başlayanlardan sayısı 5 i aşanların listesi gerekiyor. Bu durumda;
select alan_adi, count(alan_adi) from tablo
where alan_adi like 'De%'
group by alan_adi
having count(alan_adi) > 5
şeklinde kullanırız. Ya da il_kodu diye birşey var ve "o ildeki olay sayisi 3 le 5 arasi olanlar" gibi bir kriterde count(olay_sayisi) having e, il kodu ise where e parametre verilir.
Daha akılda kalıcı olması için;
"HAVING aggregate fonksiyonları kullanılarak oluşan alanların filtrelenmesinde kullanılır" ifadesi sanırım yanlış olmayacaktır.
Kolay gelsin,
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
..
Sql.Add('GROUP BY HASTALIK_TURU,KAYIT_TARIHI');
Sql.Add('HAVING KAYIT_TARIHI>=:baslangic and KAYIT_TARIHI<=:bitis')
Yok eğer kayıt tarihini sorgu sonucunda görmeyeceksen select de kayıt_tarihini kaldır ozamna group by da da yazmana gerek yok. Bu durumda WHERE ile sorgulamalısın!
arkadaşlar bütün dediklerinizi yaptım naile hocam son yazdıklarınıda yaptım sanki sorun başka sanırım devamlı aynı hatayı veriyor. Operation not applicable hatası veriyor
Hi there,
It is a problem caused by what Mysql wants in the mean of Date format. And if
your regional settings and Mysql wants not match you have that error message.
For example MYsql wants 'yyyy-mm-dd' and your regional setting is 'mm-dd-yyyy'
u got this error.
Solution:
procedure TForm1.Button1Click(Sender: TObject);
var
Fd : TFormatSettings;//date format
begin
GetLocaleFormatSettings(GetThreadLocale,Fd);
Fd.ShortDateFormat := 'yyyy-mm-dd';
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('Select * from instant');
query1.SQL.Add('where tarih > '+
QuotedStr(DateToStr(datetimepicker1.Date,Fd)));
query1.Open;
end;
that is all.
Sizde tarih kısmını eklerken delphiden bu yöntemle eklemişsiniz
ParamByName('baslangic).AsDate := MonthCalender1.Date;
ParamByName('bitis).AsDate := MonthCalender2.Date;
Tarih alanını yukarda önerilen şekilde ekleyin ya da delphide uygun bir şekilde string olarak biçimlendirip değişkeni direkt elle girin.
Çözümleri kolaylaştırmak açısından sql ile ilgili bir durumda önce kodunuzu mysql query browser gibi db üzerinde direkt işlem yapan bir araçla çalıştırıp ardından programınıza eklemekte fayda var.
Bak, eğer gruplama yapıyorsan select de yazdığın fieldları group by a da yazman lazım (aggregate fonksiyonları kullandıkların hariç, yani sum gibi) GROUP BY da HASTALIK_TURU nün yanına KAYIT_TARIHI ni de yaz demişim ama yazmamışsın ki
Bence sqlle ilgili basit bir döküman bulup temel konulara bakmanı tavsiye ederim. (gruplamalar v.b.)
Arkadaş yine yazım hatası yapmışsın Tırnak ve virgüller eksik. İlk SUM olan satırda fazlalıktan tırnak var. Bunu daha yazarken farketmen lazım. Delphi IDE de renk seçeneklerini uygun şekilde verirsen, mesela string kısmın nerede başlayıp nerede bittiğini renginden anlarsın. Dolaysıyla tırnak hataları açıkça gözükür. Gerçi burada daha derlerken bile takılırsın Neyse senin için düzenleyip aşağıya yapıştırıyorum. Alıp programın içine yapıştırabilirsin.
sayın rsimsek hocam yazdığınız kodun aynısını alıp kopyaladım
ama hata yine aynı sanırım ODBC Driver demi bir sorun var .
hata Operation not applicable hatası
naile hocam verdiğiniz örnek çalıştı teşekkür ederim fakat tarihleride gurupluyor tarihleri guruplamadan iki tarih arası girilen kayıtlar arasından
hastalık türlerine göre gruplama yapabilirmiyiz
daha önceki sorunda Myodbc 3.51 driverle çalışmadı fakat 2.5 MyOdbc driverle çalıştı