Yaş Yüzdesi Almak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Yaş Yüzdesi Almak

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar,

Tablo: UYE

Alanlar:
adı
soyadı
cinsiyeti
doğum_tarihi (date)

yaş yüzdesi almak istiyorum yardımcı olabilirmisiniz.

almak istediğim örn.
18 - 25 yaş % 30
25 - 35 yaş % 40
35 - 45 yaş %20
45 yaş üstü % 10
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: Yaş Yüzdesi Almak

Mesaj gönderen cmkare »

if (YAS>=18 ) or (YAS<=25 ) then
begin
label1.caption:='%30';
end
else
if (YAS>=26 ) or (YAS<=35 ) then
begin
label1.caption:='%40';
end
..
....
......

gibi işine yarar sanırım.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Yaş Yüzdesi Almak

Mesaj gönderen erdogan_ozkaya »

ilginize çok teşekkür ederim, yaş die bir alan yok sadece doğum tarihi var oda tarih formatında ve SQL sorgusu olursa daha iyi olur hocam :)
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: Yaş Yüzdesi Almak

Mesaj gönderen sabanakman »

Kod: Tümünü seç

select _18_ALTI*100/TOPLAM as _18_ALTINDA,
_18_25*100/TOPLAM as _18ile25,
_25_35*100/TOPLAM as _25ile35,
_35_45*100/TOPLAM as _35ile45,
_45_USTU*100/TOPLAM as _45_USTUNDE,
lst.* from
(select
  cast(count(*) as float) as TOPLAM,
  sum(case when YAS<18 then 1.0 end) as _18_ALTI,
  sum(case when YAS>=18 and YAS<=25 then 1.0 end) as _18_25,
  sum(case when YAS>25 and YAS<=35 then 1.0 end) as _25_35,
  sum(case when YAS>35 and YAS<=45 then 1.0 end) as _35_45,
  sum(case when YAS>45 then 1.0 end) as _45_USTU
 from (select cast(getdate()-dogum_tarihi as int) as YAS from UYE where dogum_tarihi is not null) as tbl
 where YAS>0
) as lst
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Yaş Yüzdesi Almak

Mesaj gönderen erdogan_ozkaya »

hocam cevabınız için çok teşekkür ederim fakat alakasız sonuçlar veriyor 18 yaş ve 45 yas üstünde alakasız sonuç veriyor, 18-25 25-35 35-45 boş sonuçlar veriyor.

teşekkürler
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: Yaş Yüzdesi Almak

Mesaj gönderen cmkare »

Proje ne projesidir? yani bunu forumda ne yaparken kullanacaksınız? ona göre bir pratik yol söyleyebilirim.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Yaş Yüzdesi Almak

Mesaj gönderen erdogan_ozkaya »

Üye takip programı, üyelerin yaşlarının ortalamasını almak istiyorum hangi yaşta kaç tane üye var (yüzde olarak ) şaban hocamızın verdiği gibi ama doğru sonuç alamadım :( (SQL 2005 ve 2008 kullanıyorum)
cmkare
Üye
Mesajlar: 177
Kayıt: 23 Ağu 2010 11:29

Re: Yaş Yüzdesi Almak

Mesaj gönderen cmkare »

projeni şöyle değiştirsende herseferinde böyle uğraşmasan?
üyeyi eklerken yaşını hesaplatıp YAS alanına yazdır. daha mantıklı.
ilk kayıt ekranında 2013den doğum tarihini çıkar YAS alanına yazdır kaydet.
daha sonra sql koduyla yağırablirsin.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Yaş Yüzdesi Almak

Mesaj gönderen erdogan_ozkaya »

hocam,
1. 100000 kayıt var ve işlenmiş
2. dediğiniz gibi yaparsam sonuçlar yanlış olur nedeni gün ve gün oranlar değişebilir :) doğum tarihinden dolayı

cevabınız için teşekkürler
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Yaş Yüzdesi Almak

Mesaj gönderen erdogan_ozkaya »

arkadaşlar konu günceldir.. :)
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: Yaş Yüzdesi Almak

Mesaj gönderen sabanakman »

Aslında sürekli bir cevap beklentisi içinde olmak yerine değişik çalışmalara girişmeniz çok daha sağlıklı olacaktır. Yukarıdaki örnek sorgudan ip ucu elde ederek daha farklı yapıda çalışmalar yapabilirsiniz. Hem probleminizi parçalarına doğru bir şekilde ayırabilirseniz sonuca ulaşmanız daha kolay olacaktır. Mesela ilk adım yaşların elde edilmesiyle başlar. Eğer bu noktada sıkıntı çıkarsa bundan sonraki adımların doğruluğunun bir önemi kalmaz.
1-Yaşların tespit edilmesi
select cast(getdate()-dogum_tarihi as int) as YAS from UYE where dogum_tarihi is not null
bu sorgu ile doğum tarihi kaydı olanların listesi elde edilir, diğer kayıtlar ele alınmaz.

2-Toplam kaç kişinin olduğu ve yaşların gruplara göre kaçar kişi olduğunun hesaplanması
select
cast(count(*) as float) as TOPLAM, -->Toplam kaç kişi
sum(case when YAS<18 then 1.0 end) as _18_ALTI, -->18'den küçük yaşlar
sum(case when YAS>=18 and YAS<=25 then 1.0 end) as _18_25, -->18 ve 25 yaş arası
sum(case when YAS>25 and YAS<=35 then 1.0 end) as _25_35,-->26 ve 35 yaş arası
sum(case when YAS>35 and YAS<=45 then 1.0 end) as _35_45,-->36 ve 45 arası
sum(case when YAS>45 then 1.0 end) as _45_USTU-->45 ten büyük yaşlar
from (
select cast(getdate()-dogum_tarihi as int) as YAS from UYE where dogum_tarihi is not null) as tbl
where YAS>0
Elde edilen değerler hangi yaş grubunda kaç kişi olduğunu vermeli.

3-Bulunan bu toplam ve sayıların yüzde olarak hesaplanması
select _18_ALTI*100/TOPLAM as _18_ALTINDA,
_18_25*100/TOPLAM as _18ile25,
_25_35*100/TOPLAM as _25ile35,
_35_45*100/TOPLAM as _35ile45,
_45_USTU*100/TOPLAM as _45_USTUNDE,
lst.* from
(
select
cast(count(*) as float) as TOPLAM, -->Toplam kaç kişi
sum(case when YAS<18 then 1.0 end) as _18_ALTI, -->18'den küçük yaşlar
sum(case when YAS>=18 and YAS<=25 then 1.0 end) as _18_25, -->18 ve 25 yaş arası
sum(case when YAS>25 and YAS<=35 then 1.0 end) as _25_35,-->26 ve 35 yaş arası
sum(case when YAS>35 and YAS<=45 then 1.0 end) as _35_45,-->36 ve 45 arası
sum(case when YAS>45 then 1.0 end) as _45_USTU-->45 ten büyük yaşlar
from (
select cast(getdate()-dogum_tarihi as int) as YAS from UYE where dogum_tarihi is not null) as tbl
where YAS>0

) as lst
Burada 3 adımlı bir teste girişmeli ve hangi adımda ne sorun çıkıyorsa onu düzeltme çalışmaları yapmalısınız.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Yaş Yüzdesi Almak

Mesaj gönderen erdogan_ozkaya »

Aşağıdaki Kod ile çözüldü işine yarayan arkadaş kendine göre uyarlayabilir.

herkesin cevabı için teşekkürler.

Kod: Tümünü seç

SELECT '18-25' YasAraliği, K15_25.TUM KisiSayisi,ROUND(CAST (K15_25.TUM*100 AS FLOAT)/ KTUM.TUM,2) YasUstu15Orani,
COUNT(S.SN) ToplamNufus
 FROM SECMEN S,
(SELECT COUNT(S.SN) TUM FROM SECMEN S ) KTUM,
(SELECT COUNT(S.SN) TUM FROM SECMEN S WHERE DATEDIFF(YEAR,S.DOGUM_TARIHI,GETDATE())>=18 AND DATEDIFF(YEAR,S.DOGUM_TARIHI,GETDATE())<=25 ) K15_25
GROUP BY KTUM.TUM , K15_25.TUM
UNION
SELECT '25-35' YasAraliği, K25_35.TUM KisiSayisi,ROUND(CAST (K25_35.TUM*100 AS FLOAT)/ KTUM.TUM,2) YasUstu15Orani,
COUNT(S.SN) ToplamNufus
 FROM SECMEN S,
(SELECT COUNT(S.SN) TUM FROM SECMEN S ) KTUM,
(SELECT COUNT(S.SN) TUM FROM SECMEN S WHERE DATEDIFF(YEAR,S.DOGUM_TARIHI,GETDATE())>=26 AND DATEDIFF(YEAR,S.DOGUM_TARIHI,GETDATE())<=35 ) K25_35
GROUP BY KTUM.TUM , K25_35.TUM
UNION
SELECT '35-45' YasAraliği, K35_45.TUM KisiSayisi,ROUND(CAST (K35_45.TUM*100 AS FLOAT)/ KTUM.TUM,2) YasUstu15Orani,
COUNT(S.SN) ToplamNufus
 FROM SECMEN S,
(SELECT COUNT(S.SN) TUM FROM SECMEN S ) KTUM,
(SELECT COUNT(S.SN) TUM FROM SECMEN S WHERE DATEDIFF(YEAR,S.DOGUM_TARIHI,GETDATE())>=36 AND DATEDIFF(YEAR,S.DOGUM_TARIHI,GETDATE())<=45 ) K35_45
GROUP BY KTUM.TUM , K35_45.TUM
UNION
SELECT '45-99' YasAraliği, K45_99.TUM KisiSayisi,ROUND(CAST (K45_99.TUM*100 AS FLOAT)/ KTUM.TUM,2) YasUstu15Orani,
COUNT(S.SN) ToplamNufus
 FROM SECMEN S,
(SELECT COUNT(S.SN) TUM FROM SECMEN S ) KTUM,
(SELECT COUNT(S.SN) TUM FROM SECMEN S WHERE DATEDIFF(YEAR,S.DOGUM_TARIHI,GETDATE())>=46 AND DATEDIFF(YEAR,S.DOGUM_TARIHI,GETDATE())<=99 ) K45_99
GROUP BY KTUM.TUM , K45_99.TUM

Cevapla