Tabloda aynı olan kayıtları toplamak?

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
boncapelo
Üye
Mesajlar: 49
Kayıt: 01 Tem 2005 02:28
Konum: Bursa
İletişim:

Tabloda aynı olan kayıtları toplamak?

Mesaj gönderen boncapelo »

Selamunaleyküm...
sayın hocalarım sorum şu örneğin kitap tablomda "kitapadi" alanına göre aynı isimli kitapların kaç tane olduğunu hesaplatıp ilk 5 tanesini almak istiyorum bunu nasıl yapabilirim acaba?yani örnek olarak şöle anlatayım;
bu bir kütüphane programı diyelim ki 1.müşteri geldi kaşağı kitabını aldı.2.müşteri kaşağıyı aldı 3.müşteri geldi oda kaşağıyı aldı ve 4. ve 5. müşteriler sinekli bakkalı aldı.6.müşteride savaş ve barışı aldı. bir sorgu ile aynı isimli kitapların sayısını toplatıp büyükten küçüğe ilk 5 tanesini çekmek istiyorum:
sonuç:
1-Kaşağı
2-Sinekli Bakkal
3-Savaş ve Barış

sql çıktısı bu şekilde olacak bunu nasıl bi yöntem ile yapbiliriz yardımcı olabilirmisiniz?

Allah Yardımcınız Olsun...
Saygılar...
..::ÖzSoft Computer Land & NetCity Internet Cafe::..
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

Merhaba

Bu sql satırını kullanabilirsin.

SELECT FIRST 5 COUNT(ID), KitapAdi
FROM Kitap
GROUP BY KitapAdi
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

@boncapelo ile msn üzerindende görüşüyoruz. Bu kodları oradanda gönderdim ona. Ancak sıralama yapmadığını bildirdi.

Order By ifadesi le tekrar düzenledik kodları ama bu seferde sorgu çalışmadı.

SELECT FIRST 5 COUNT(ID) SAYI, KitapAdi
FROM Kitap
GROUP BY KitapAdi
ORDER BY SAYI


SAYI isimli alanın tanınmadığına ilişkin hata dönüyor geriye. Sanırım iç içe sorgular ile çözülecek problem.

Bu konuda fikri olan var mı? (@boncapelo'nun destek elemanı gibiyim bu arada :))
Kullanıcı avatarı
MakPRO
Üye
Mesajlar: 251
Kayıt: 31 Eki 2003 05:21
Konum: Antalya
İletişim:

Mesaj gönderen MakPRO »

mrb

Söylediklerin için database üzerinde bir test tablosu oluşturdum ve aşağıdaki sonucu aldım. mysql kullandığım için interbase de denemedim ama sanırım interbase içinde olur

Kod: Tümünü seç

SELECT count(kitapadi) as Adet,id,kitapadi FROM `kitap` 
WHERE 1 
group by kitapadi 
order by Adet desc
boncapelo
Üye
Mesajlar: 49
Kayıt: 01 Tem 2005 02:28
Konum: Bursa
İletişim:

Mesaj gönderen boncapelo »

teşekkür hocam cevap için order komutunu diğer sorgunun çok yerinde denedim denemediğim şekil kalmamıştı.bide bunu deneyeyim böle hocam yalnız bu desc tersden sırala anlamına gelmiyormu neyse bi denim
Saygılar...
Allah Yardımcınız Olsun...
..::ÖzSoft Computer Land & NetCity Internet Cafe::..
boncapelo
Üye
Mesajlar: 49
Kayıt: 01 Tem 2005 02:28
Konum: Bursa
İletişim:

Mesaj gönderen boncapelo »

malesef hocam buda olmadı kodu olduğu gibi kabul etmedi zaten değişiklik yapıp denedim yine olmadı sql kullanımı hatası veriyor...
Saygılar...
Allah Yardımcınız Olsun...
..::ÖzSoft Computer Land & NetCity Internet Cafe::..
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

name yazdı:@boncapelo ile msn üzerindende görüşüyoruz. Bu kodları oradanda gönderdim ona. Ancak sıralama yapmadığını bildirdi.

Order By ifadesi le tekrar düzenledik kodları ama bu seferde sorgu çalışmadı.

SELECT FIRST 5 COUNT(ID) SAYI, KitapAdi
FROM Kitap
GROUP BY KitapAdi
ORDER BY SAYI


SAYI isimli alanın tanınmadığına ilişkin hata dönüyor geriye. Sanırım iç içe sorgular ile çözülecek problem.

Bu konuda fikri olan var mı? (@boncapelo'nun destek elemanı gibiyim bu arada :))


SELECT FIRST 5 COUNT(ID) AS SAYI, KitapAdi
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

bende deneme amaçlı kitap isimli bir tablo oluşturup, işlemi sp ile hallettim

sp kodları

Kod: Tümünü seç

CREATE PROCEDURE NEW_PROCEDURE 
returns (
    id integer,
    kitap_adi varchar(30))
as
begin

  for select distinct(kitapadi) from kitap
  into :kitap_adi do
  begin
    select first 5 count(id) from kitap
    where kitapadi =:kitap_adi
    into :id;
  suspend;
  end
Delphi Bağlantı Kodları

Kod: Tümünü seç

SELECT
 ID,
 KITAP_ADI
FROM
 NEW_PROCEDURE
ORDER BY ID DESC

Ekran Görüntüsü

Resim

umarım yardımcı olumuştur...
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

@kadirkurtoglu, hocam sanırım SP ile gereksiz bir tekrarlayan döngü kurmuşsun :wink:

@name kardeşimizin verdiği cevaba küçük bir düzeltme ile sonuç alınabilir :idea:

Kod: Tümünü seç

SELECT FIRST 5 COUNT(ID) SAYI, KitapAdi
FROM Kitap
GROUP BY KitapAdi
ORDER BY 1 
Yukarıdaki gibi sıralamayı alan adı olarak belirtemediğinizde select teki sırasını yazabilirsiniz. 1.nci alan için 1, 2.nci alan için 2, ..vb.

Kolay gelsin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

Recep abi sayende bir şey daha öğrenmiş oldum. :D
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

name yazdı:Recep abi sayende bir şey daha öğrenmiş oldum. :D
Rica ederim hocam daha önce de bir kaç kez örneği verilmişti, kaçırmışsın demek :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
boncapelo
Üye
Mesajlar: 49
Kayıt: 01 Tem 2005 02:28
Konum: Bursa
İletişim:

Mesaj gönderen boncapelo »

Selamunaleyküm...
Sayın hocalarım öncelikle zaman ayırıp cevapladığınız için teşekkür ederim.
sorunu @rsimsek hocamın koduna küçük bir ek yaparak hallettim

Kod: Tümünü seç

ibquery1.Close;
ibquery1.SQL.Add('SELECT FIRST 5 COUNT(did)as SAYI, Kitap FROM hareket GROUP BY Kitap ORDER BY 1 desc ');
ibquery1.Open;
Saygılarımla...
Allah Yardımcınız Olsun...
..::ÖzSoft Computer Land & NetCity Internet Cafe::..
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

@kadirkurtoglu, hocam sanırım SP ile gereksiz bir tekrarlayan döngü kurmuşsun
hocam bende gereksiz olduğunun bilincindeyim ancak 1 - 2 hata alınca döngüye soktum. zaten count, sum, max, avg tarzı sql kodları tabloyu şarta bağlı tamamını tarar, ayrıca baştan sonra tara gibi bir ifade yersizdir...
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

İlk mesajda küçükten büyüğe deyince DESC (tersten sıralama) eklememiştim. :wink:
kadirkurtoglu yazdı:
@kadirkurtoglu, hocam sanırım SP ile gereksiz bir tekrarlayan döngü kurmuşsun
hocam bende gereksiz olduğunun bilincindeyim ancak 1 - 2 hata alınca döngüye soktum. zaten count, sum, max, avg tarzı sql kodları tabloyu şarta bağlı tamamını tarar, ayrıca baştan sonra tara gibi bir ifade yersizdir...
@kadirkurtoglu kardeş farkındaysa for select distinct ile kitap listesi oluşturup daha sonra içteki select ile de tüm tablodaki kayıtlar için tekrar tarama yapıyorsun. Birden fazla çözümün olması güzel bir şey tabi fakat "en sağlam kod en basit koddur" sözünü hatırlamakta fayda var. :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla