• 09-02-2010, 21:03:02
    #1
    Üyeliği durduruldu
    ş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?
  • 09-02-2010, 21:08:02
    #2
    Alıntı
    SELECT isim , ders, puan FROM tablo1 WHERE isim = 'ahmet' order by puan desc limit 0,1
    şeklinde yapsan
  • 09-02-2010, 21:09:47
    #3
    Üyeliği durduruldu
    mysqlin 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
    #4
    Üyeliği durduruldu
    mecbur 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
    #5
    Üyeliği durduruldu
    ogrencinin 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
    #6
    Üyeliği durduruldu
    D3LLy adlı üyeden alıntı: mesajı görüntüle
    ogrencinin 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
    order by kısmını max(not) şekline getirdim zaten. umarım kasmaz walla. yoksa işimiz iş
  • 10-02-2010, 00:09:41
    #7
    Üyeliği durduruldu
    max, 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