sql de sutunların çarpımını nasıl yapabilirim?

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

sql de sutunların çarpımını nasıl yapabilirim?

Mesaj gönderen ng »

Önce peşinen söyliyeyim forumda arattım!
sorguda sum() komutu ile bir sutunun toplamını bulabildiğimiz gibi çarpımlarını da bulmamızın bir yolu var mı?
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Nasıl çarpım bu, kartezyen çarpımı mı yoksa faktoriyel gibi birşey mi hesaplatacaksın? Detaylı yazarsan bir çözüm bulabileceğini umuyorum :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

Mesaj gönderen ng »

select carpım(oran) from tablo where a=5
gibi bir cümle ile tablodaki a alanı 5 olan kayıtların carpımlarını bulmak istiyorum. Mesela bu şartları sağlayan kayıtlardaki oranlar 3.2.1 ise sonuç olarak 6 döndürecek bir cümle kurmak istiyorum. Bu cümlede carpım kelimesi yerine yazabileceğim bir komu var mı?
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

Mesaj gönderen ng »

select carpım(oran) from tablo where a=5
gibi bir cümle ile tablodaki a alanı 5 olan kayıtların carpımlarını bulmak istiyorum. Mesela bu şartları sağlayan kayıtlardaki oranlar 3.2.1 ise sonuç olarak 6 döndürecek bir cümle kurmak istiyorum. Bu cümlede carpım kelimesi yerine yazabileceğim bir komu var mı?
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

3.2.1 in çarpın sonucu 6 değil 7 çıkar. 6 çıkması lazımsa sum() alman yeterli.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

Mesaj gönderen ng »

hocam 3,2,1 rakamlarını salladım sonuç olrak çarpımlarını vermeli sum sadece toplamlarını verir. mesela rakamlar 4,5,10 olsa idi sonuç 4*5*10= 200 sonucunu verecek bir komut arıyorum.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

rsimsek yazdı:3.2.1 in çarpın sonucu 6 değil 7 çıkar.
hocam dalgınlık oldu galiba 3 * 2 * 1 = 6 olur :)

sutunları carpan bi sql cümlesi bildiğim kadarıyla yok ama sp kullanılarak yapılabilir diye düşünüyorum..
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

evet eder 6 :)

en iyisi udf bir carpim() fonksiyonu yazıp deneme.

yine de zor gibi Fahrettin hoca bile çözemez :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

yine de zor gibi Fahrettin hoca bile çözemez
Abi gazı verdin yaktın bizi ;)

Simdi bu işi çözene kadar iş , uyku, YEMEK, herşeye ara vericez...
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Baktım pek fazla sesin soluğun çıkmıyor bari sabah sabah hareket gelsin foruma :lol:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

evet bu gunlerde biraz yoğunluğum oluştuğundan sessizleştik... :)
Konu üzerinde düşündüm... Aklıma gelen tek yöntem bir stored procedure ile dongu halinde butun kayıtlar elden geçirilip çarpılarak problem çözülebilir... Sybase ile bu procedure'u yazmak fazla problem degil ama.... kullanılan veritabanına göre iş zorlaşabilir...
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
onaydin

Mesaj gönderen onaydin »

firebird için;

Kod: Tümünü seç

declare variable tmp_sayi integer;
begin
  D_SAYI = 1;
  for select SAYI from SAYI into :tmp_sayi
  do
  begin
   D_SAYI = tmp_sayi * D_SAYI;
  end

end
(D_SAYI integer olarak tanımlı ve return)
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

@onaydin'ın koduna "Suspend" satırının eklenmesi gerekli.

Kod: Tümünü seç

DECLARE VARIABLE TMP_SAYI INTEGER; 
BEGIN
  D_SAYI = 1;TMP_SAYI=1; 
  FOR SELECT ORAN FROM TABLO WHERE A=5 INTO :TMP_SAYI
  DO
  BEGIN
    D_SAYI = TMP_SAYI * D_SAYI;
    SUSPEND;
  END

END
onaydin

Mesaj gönderen onaydin »

aslında ben kodu çalıştırdım suspend eklemeden çalışıyordu

bide bunu procedure le yapmak bana ters geldi çünkü bu durumda kod mysql de çalışmıyordu. Biraz araştırdım mssql için bi kod buldum sybase denedim çalışıyor sadece select yeterli böyle olunca haliyle mysql de de çalışır.

Kod: Tümünü seç

select convert(varchar,exp(sum(log(SAYI)))) from TABLO
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

Mesaj gönderen ng »

cevaplar için teşekkür ederim. SP deki for select yerine bu şartları sağlayan tüm kayıtları bir dizi içine almanın bir yolu yok mu? Yada sum() fonksiyonunun çalışma mantığı ile bir carpım udf yazılamaz mı?
Cevapla