Veri çekme sql ile filtreleme

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
atila1970
Üye
Mesajlar: 11
Kayıt: 22 Nis 2009 03:51

Veri çekme sql ile filtreleme

Mesaj gönderen atila1970 »

Arkadaşlar bu konuda yardımcı olursanız sevinirim. Şöyle bir sorunum var. Veri tabanımda bir sınıfa ait öğrenci listeleri öğrencilerin isminin karşısında dersler sütunu var Dersler sütununda Türkçe, Matematik, Fen vb. isimler diğer bir sütun ise bu derslerden öğrencilerin aldığı notlar var. Kısacası ben her dersten ilk üç sıraya giren başarılı öğrencileri select yapmak istiyorum. SQL ile yapmaya çalıştım ama toplam kayıtların ilk üçünü getiriyor halbuki ben derslere göre ilk üçünü getirmek istiyorum. Selam ve saygılarımla. Yardımınızı bekliyorum.
En son atila1970 tarafından 04 Tem 2014 07:21 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
atila1970
Üye
Mesajlar: 11
Kayıt: 22 Nis 2009 03:51

Re: Çok Acil Veri çekme sql ile filtreleme

Mesaj gönderen atila1970 »

Select öğrenci_adi , dersler, not from öğrenci_listesi order by dersler asc, not desc rows 1 to 3 deyimi ile sadece veri tabanındaki ilk üç kayıt listeleniyor. Benim istediğim derslerdeki ders adına göre ilk üç kayıt.
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Çok Acil Veri çekme sql ile filtreleme

Mesaj gönderen greenegitim »

senin istediğin çıktının örneğini paylaşabilirmisin
aliveli matematik 100
aliveli fen 100
ayşe matematik 99
gibimi
distinct ve group by i araştırabilirsin.
Mücadele güzelleştirir!
atila1970
Üye
Mesajlar: 11
Kayıt: 22 Nis 2009 03:51

Re: Çok Acil Veri çekme sql ile filtreleme

Mesaj gönderen atila1970 »

Ekran görüntüsünü excelde hazırladım. Umarım açıklayabilmişimdir sorunumu. Saygılarımla.
Dosya ekleri
Ekran görüntüsü
Ekran görüntüsü
veri.jpg (10.09 KiB) 4723 kere görüntülendi
atila1970
Üye
Mesajlar: 11
Kayıt: 22 Nis 2009 03:51

Re: Çok Acil Veri çekme sql ile filtreleme

Mesaj gönderen atila1970 »

VERİTABANI
ÖĞRENCİ ADI DERSLER NOT
ALİ Türkçe 95
AHMET Türkçe 100
DURSUN Türkçe 55
MEHMET Türkçe 45
SAİT Türkçe 80
VELİ Türkçe 60
SERDAR Türkçe 90
ALİ Matematik 80
AHMET Matematik 98
DURSUN Matematik 55
MEHMET Matematik 45
SAİT Matematik 76
VELİ Matematik 60
SERDAR Matematik 90
ALİ Fen 75
AHMET Fen 65
DURSUN Fen 90
MEHMET Fen 45
SAİT Fen 56
VELİ Fen 60
SERDAR Fen 92


SQL Çalıştıktan sonra Gelmesi gereken bilgi
ÖĞRENCİ ADI DERSLER NOT
AHMET Türkçe 100
ALİ Türkçe 95
SERDAR Türkçe 90
AHMET Matematik 98
SERDAR Matematik 90
ALİ Matematik 80
SERDAR Fen 92
DURSUN Fen 90
ALİ Fen 75
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Çok Acil Veri çekme sql ile filtreleme

Mesaj gönderen mrmarman »

Basit düşünürsek (Dersler değişken olmadığına göre)

Kod: Tümünü seç

  With AdoQuery1 do
  begin
    SQL.Clear;
    SQL.Add('(SELECT TOP 3 * FROM TABLO WHERE DERSLER = ''Türkçe''    ORDER BY NOTLAR DESC)');
    SQL.Add('UNION');
    SQL.Add('(SELECT TOP 3 * FROM TABLO WHERE DERSLER = ''Matematik'' ORDER BY NOTLAR DESC)');
    SQL.Add('UNION');
    SQL.Add('(SELECT TOP 3 * FROM TABLO WHERE DERSLER = ''Fen''       ORDER BY NOTLAR DESC)');
    SQL.Add('ORDER BY DERSLER ASC, NOTLAR DESC, ISIMLER ASC');
    Active := True;
  end;
işini görecektir diye düşünüyorum.
Resim
Resim ....Resim
atila1970
Üye
Mesajlar: 11
Kayıt: 22 Nis 2009 03:51

Re: Çok Acil Veri çekme sql ile filtreleme

Mesaj gönderen atila1970 »

Veri tabanım firebird ayrıca bu söylediğiniz kodu sql in içine yazmak istiyorum IBQuery kullanıyorum. Kodu ona göre düzenlerseniz sevinirim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Çok Acil Veri çekme sql ile filtreleme

Mesaj gönderen mrmarman »

atila1970 yazdı:Veri tabanım firebird ayrıca bu söylediğiniz kodu sql in içine yazmak istiyorum IBQuery kullanıyorum. Kodu ona göre düzenlerseniz sevinirim.
atila1970 yazdı:SQL ile yapmaya çalıştım ama toplam kayıtların ilk üçünü getiriyor halbuki ben derslere göre ilk üçünü getirmek istiyorum. Selam ve saygılarımla. Yardımınızı bekliyorum.
deyince biliyorsun sandım.

TOP yerine FIRST kullanma kafi..

Kod: Tümünü seç

  With IBQuery1 do
  begin
    SQL.Clear;
    SQL.Add('(SELECT FIRST 3 * FROM TABLO WHERE DERSLER = ''Türkçe''    ORDER BY NOTLAR DESC)');
    SQL.Add('UNION');
    SQL.Add('(SELECT FIRST 3 * FROM TABLO WHERE DERSLER = ''Matematik'' ORDER BY NOTLAR DESC)');
    SQL.Add('UNION');
    SQL.Add('(SELECT FIRST 3 * FROM TABLO WHERE DERSLER = ''Fen''       ORDER BY NOTLAR DESC)');
    SQL.Add('ORDER BY DERSLER ASC, NOTLAR DESC, ISIMLER ASC');
    Active := True;
  end;

Kod: Tümünü seç

    (SELECT FIRST 3 * FROM TABLO WHERE DERSLER = ''Türkçe''    ORDER BY NOTLAR DESC)
    UNION
    (SELECT FIRST 3 * FROM TABLO WHERE DERSLER = ''Matematik'' ORDER BY NOTLAR DESC)
    UNION
    (SELECT FIRST 3 * FROM TABLO WHERE DERSLER = ''Fen''       ORDER BY NOTLAR DESC)
    ORDER BY DERSLER ASC, NOTLAR DESC, ISIMLER ASC
Resim
Resim ....Resim
atila1970
Üye
Mesajlar: 11
Kayıt: 22 Nis 2009 03:51

Re: Çok Acil Veri çekme sql ile filtreleme

Mesaj gönderen atila1970 »

QUERY içine yazıyorum olmuyor. Yazdığınız kodun tek satırı çalışıyor uinon a geltiğinde hata veriyor.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Çok Acil Veri çekme sql ile filtreleme

Mesaj gönderen mrmarman »

atila1970 yazdı:QUERY içine yazıyorum olmuyor. Yazdığınız kodun tek satırı çalışıyor uinon a geltiğinde hata veriyor.

UNION satırlarını UNION ALL yapın çalışır.
Internetten SQL kod araştırırken, veritabanları arasındaki nüans farklılıklarını mutlaka bir yere not edin. Bu gibi küçük sorunların üstesinden rahatlıkla gelebilirsiniz.
Resim
Resim ....Resim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Veri çekme sql ile filtreleme

Mesaj gönderen freeman35 »

konuyu eleman arıyanlar bölümüne taşıycam, şurasınıda şöyle olsun tarzında bir mesaj daha gelirse
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
atila1970
Üye
Mesajlar: 11
Kayıt: 22 Nis 2009 03:51

Re: Veri çekme sql ile filtreleme

Mesaj gönderen atila1970 »

Çok tşk. ederim yardımlarınız için. Sorun hal oldu. Aşağıdaki şekilde yapınca istediğim şekilde oldu

select first 3 * from Dersler where dersler='Türkçe'
Union
select first 3 * from Dersler where dersler='Fen'
Union
select first 3 * from Dersler where dersler='Matematik'
order by 2,not desc
Cevapla