Tek SQL ile Yüzde Değeri Almak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
hacikisi
Üye
Mesajlar: 64
Kayıt: 24 Şub 2004 07:29
Konum: Gaziantep

Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen hacikisi »

acces veritabanındaki secenek tablomda bulunan cevapsayi alanının yüzdesini almak istiyorum.
secenek cevapsayi
a) seviyorum 15
b) sevmiyorum 12
c) fikrim yok 9

böyle bir yapıda istediğim (tek sql sorgusu ile) her şıkkın yüzdesini almak. toplam cevapsayısı 36 buna göre
mesela a şıkkının yüzdesini almak için 15*100/36 nın sonucunu nasıl alabilirim.

Select anketid, secenek, cevapsayi, (cevapsayi) * 100 / Sum(cevapsayi) AS YUZDE
From anketsecenek WHERE ([AnketId] = ?)
group by anketid, Secenek, cevapsayi

SUM ALANI BURDA HATA VERİYOR BUNU NASIL YAZABİLİRİZ. HERKESE SAYGILAR SUNUYORUM.
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.

Hz.Muhammed (S.A.V.)
Resim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen sabanakman »

Ack isimli bir alan ve tbl isimli access tablosunda aşağıdaki sorguyu çalıştırdım yapısını incelemeni tavsiye ederim.

select *, (Sayi*100/Toplam) as Yuzde from (select *, (select count(*) from tbl) as Toplam from (select Ack, count(*) as Sayi from tbl group by Ack) as Genel) as Sonuc
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
hacikisi
Üye
Mesajlar: 64
Kayıt: 24 Şub 2004 07:29
Konum: Gaziantep

Re: Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen hacikisi »

sabanakman yazdı:Ack isimli bir alan ve tbl isimli access tablosunda aşağıdaki sorguyu çalıştırdım yapısını incelemeni tavsiye ederim.

select *, (Sayi*100/Toplam) as Yuzde from (select *, (select count(*) from tbl) as Toplam from (select Ack, count(*) as Sayi from tbl group by Ack) as Genel) as Sonuc
burda toplam alanı elimizde yok ancak bizim cevapsayi alanlarını toplayarak bu aldığımız toplamı ilk sorumda sorduğum yüzde işlemine sokmamız gerekiyor.
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.

Hz.Muhammed (S.A.V.)
Resim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen sabanakman »

Dikkat et, toplam alanı var diye açıklama yapmadım. Ack alanına sahip bir tbl tablosu dedim :) . Sorgudaki toplam alanının nereden geldiğine dikkat et. Sağ tarafta kalın, mavi ve altı çizili olarak belirttim. Toplam sorgudan hesaplatılarak getiriliyor.
sabanakman yazdı:Ack isimli bir alan ve tbl isimli access tablosunda aşağıdaki sorguyu çalıştırdım yapısını incelemeni tavsiye ederim.

select *, (Sayi*100/Toplam) as Yuzde from (select *, (select count(*) from tbl) as Toplam from (select Ack, count(*) as Sayi from tbl group by Ack) as Genel) as Sonuc
Aşağıdaki şekilde bir tablo oluştur dene istersen..:
tbl tablo adı ve sadece Ack Metin alanı var başka hiç bir alanı yok. Tek alanlı bir tablo.

Kod: Tümünü seç

Ack
--------------
Seviyom
Bilmem
Seviyom
Sevmiyom
Seviyom
Sevmiyom
Bilmem
Seviyom
Bilmem
şeklinde kayıtlardan ibaret olsun ve verdiğim sorguyu bu tablo üzerinden çalıştırırsan, her kayıttan kaç çeşit olduğunu, toplam kaç adet olduğunu ve bu iki değerin birbirine oranının yüzde kaç olduğunu bulan sorgudur verdiğim kod :wink: . Örnek kayıtları çalıştır ve gelen sorgu sonucunun

Kod: Tümünü seç

Yuzde | Toplam | Ack      | Sayi |
------|--------|----------|------|
33,33 |      9 | Bilmem   |    3 |
44,44 |      9 | Seviyom  |    4 |
22,22 |      9 | Sevmiyom |    2 |
şeklinde olduğunu göreceksin. Tbl tablosunun sadece Ack isimli tek bir alandan oluşmasına rağmen bazı alt sorgularla istenen bir çok değer elde edilebilmektedir, bu seni yanıltmasın. Denersen anlayacaksın. Kolay gelsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
hacikisi
Üye
Mesajlar: 64
Kayıt: 24 Şub 2004 07:29
Konum: Gaziantep

Re: Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen hacikisi »

şaban abi senin kodlarına bakarak kendime uyarlamaya çalıştım aşağıdaki gibi ancak from yantümcesinde söz dizimi hatası verdi.

select *, (CevapSayi*100/Toplam) as Yuzde from
select *, (select sum(CevapSayi) from anketsecenek) as Toplam
from anketsecenek
group by cevapsayi
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.

Hz.Muhammed (S.A.V.)
Resim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen sabanakman »

Tablonun alanlarını ve kayıtlarını tam tarif edebilir misin? Ayrıca sorgunda parantezler konusunda sıkıntı olabilir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
hacikisi
Üye
Mesajlar: 64
Kayıt: 24 Şub 2004 07:29
Konum: Gaziantep

Re: Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen hacikisi »

abi kodu aşağıdaki gibi düzenlediğimde çıktısı altındaki gibi geliyor. ancak burda şu sorun var toplam bu
WHERE ([AnketId] = ?) için sadece bu id ye eşit olanları bir arada toplaması gerekirken tüm idlerin toplamını alıyor.
sayi alanı gerek değil sorun değil visible false yaparım. ancak WHERE ([AnketId] = ?) ye göre toplamı sadece bu idlere ait olanların toplamını aldırabilirsek olacak abi. kodun son durumu

select *, (CevapSayi*100/Toplam) as Yuzde from (select *, (select sum(CevapSayi) from anketsecenek) as Toplam from (select Cevapsayi, count(*) as Sayi from anketsecenek
WHERE ([AnketId] = ?)
group by Cevapsayi) as Genel) as Sonuc


yüzde---toplam -- cevapsayi --

1,7 ---2552 ----44 -- 1
2.5 --2552 -- 66--- 1
21.7---2552-- 555 ---1
En son hacikisi tarafından 20 Haz 2008 05:09 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.

Hz.Muhammed (S.A.V.)
Resim
hacikisi
Üye
Mesajlar: 64
Kayıt: 24 Şub 2004 07:29
Konum: Gaziantep

Re: Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen hacikisi »

ARKADAŞLAR SORUNU AŞAĞIDAKİ GİBİ HALLETTİM ARKADAŞLARA FAYDALI OLMASI DİLEĞİYLE. ŞABAN ABİMİN KODUNDAN HAREKETLE TABİ. ÇOK TŞK. EDERİM ŞABAN ABİ.

select *, (CevapSayi*100/Toplam) as Yuzde from (select *, (select sum(CevapSayi) from anketsecenek C WHERE ([C.AnketId] = ?) ) as Toplam from (select Cevapsayi, secenek from anketsecenek A
WHERE ([A.AnketId] = ?)
group by Cevapsayi, secenek) as Genel) as Sonuc
Siz İman Etmedikçe Cennete Giremezsiniz. Birbirinizi Sevmedikçede İman Etmiş Olamazsınız.

Hz.Muhammed (S.A.V.)
Resim
LeuKaeMia
Üye
Mesajlar: 4
Kayıt: 28 Ara 2006 05:28

Re: Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen LeuKaeMia »

Bu işlemi tek field için değilde 1 den fazla field için nasıl geliştirebiliriz acaba?
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen orhancc »

nasıl bir tablo yapın var ?
LeuKaeMia
Üye
Mesajlar: 4
Kayıt: 28 Ara 2006 05:28

Re: Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen LeuKaeMia »

yukarıdaki konu ile yakın birbirine.
orda cevap anahtrına göre yüzde alınıyordu.
bende ise engelli vatandaş yüzdesi,ailereislerinin gelir yüzdesi ve daha alanda var.ama önemli olan bunları tek bir sql cümlesinde yaptırmam
galiba iyi anlatamadım.msn den falan görüşebilirmiyiz
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen sabanakman »

msn den olmaz :twisted: . Tablom şu, istediğim ise budur diye basit bir örnek vermeniz yeterli.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
LeuKaeMia
Üye
Mesajlar: 4
Kayıt: 28 Ara 2006 05:28

Re: Tek SQL ile Yüzde Değeri Almak

Mesaj gönderen LeuKaeMia »

sabanakman yazdı:msn den olmaz :twisted: . Tablom şu, istediğim ise budur diye basit bir örnek vermeniz yeterli.
o zaman öbür tarafta görüşürüz :lol:
şaka bi yana hallettim ya saolun ilgi ve alaka için
Cevapla