şimdi şöyle bir tablom var diyelim.
ahmet--------fizik-----65
mehmet------fizik-----60
ahmet--------kimya---70
ali------------kimya---60
misal bu tabloda ahmetin en yüksek notunu hangi dersten aldığını bulmak istersek şöyle birşey yazarız
SELECT isim , ders, MAX( not) FROM tablo1 WHERE isim = 'ahmet'
ve sonuç olarakta
ahmet--------kimya---70
satırının dönmesi gerek. ama bana dönen
ahmet--------fizik---70
yani isim tamam, not tamam, ama ders adı olmuyor. nedenini bilen var mı acep?
ilginç bir max() sorunu
6
●477
- 09-02-2010, 21:03:02Üyeliği durduruldu
- 09-02-2010, 21:09:47Üyeliği durduruldumysqlin group fonksiyonlarındaki eksikliğinden kaynaklanan bir şey.
max ile beraber GROUP BY isim,ders kullanmalısınız. bu da size her ogrenciyi ve aldığı en büyük notu verecektir. WHERE isim='ahmet' diyerek de öğrenciyi belirlemiş olacaksınız
SELECT isim , ders, MAX( not) FROM tablo1 WHERE isim = 'ahmet' GROUP BY isim,ders
- 09-02-2010, 21:11:06Üyeliği durduruldumecbur kalırsam o şekile dönücem ama bu şekilde niye olmuyor o kafama takıldı. hatta şurada aynısından bahsedilmiş http://bugs.mysql.com/bug.php?id=18739 ama gerçekten bir bug mı yoksa sorguda mı bir hata var onu merak ettim.
__________________________________________________ ______________
edit: D3LLY
db yi bayağı kasıcak ama mecbur öyle yapıcaz anlaşılan. - 09-02-2010, 21:19:25Üyeliği durdurulduogrencinin aynı sınavdaki en yüksek notunu vereceği için bir ahmet 3 derse girmişse 3 satır döner..
ama siz bütün notları arasındaki en büyük notu almak isterseniz
SELECT isim , ders, MAX(`not`) FROM tablo1WHERE isim = 'ahmet' GROUP BY isim,ders order by 3 desc limit 1
boyle sorgulamalısınız.
ayrıca bu db yi kasacak bir sorgu da değil rahat olun - 09-02-2010, 21:31:21Üyeliği durdurulduorder by kısmını max(not) şekline getirdim zaten. umarım kasmaz walla. yoksa işimiz işD3LLy adlı üyeden alıntı: mesajı görüntüle
- 10-02-2010, 00:09:41Üyeliği durduruldumax, min, count, sum gibi ifadeler tek basina kullanilir. çünkü şöyle bir yaklaşım yanlıştır mesela iki tane en yüksek nottan 70 olarak var diyelim bu durumda hangi 70 in olduğu kaydı donderecek
bundan dolayi böyle ifadelerde order by yada group by kullanilmasi gerekir @webrlis in kodu direk iş görüyor bence ama tam olarak ne yapmak istedigini acarsan bence yorum yapmak daha kolay