Yaş Yüzdesi Almak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Yaş Yüzdesi Almak
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
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
Re: Yaş Yüzdesi Almak
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.
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.
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: Yaş Yüzdesi Almak
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 

- 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
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. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: Yaş Yüzdesi Almak
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
teşekkürler
Re: Yaş Yüzdesi Almak
Proje ne projesidir? yani bunu forumda ne yaparken kullanacaksınız? ona göre bir pratik yol söyleyebilirim.
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: Yaş Yüzdesi Almak
Ü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)

Re: Yaş Yüzdesi Almak
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.
ü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.
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: Yaş Yüzdesi Almak
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
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

cevabınız için teşekkürler
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
- 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
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
2-Toplam kaç kişinin olduğu ve yaşların gruplara göre kaçar kişi olduğunun hesaplanması
3-Bulunan bu toplam ve sayıların yüzde olarak hesaplanması
1-Yaşların tespit edilmesi
bu sorgu ile doğum tarihi kaydı olanların listesi elde edilir, diğer kayıtlar ele alınmaz.select cast(getdate()-dogum_tarihi as int) as YAS from UYE where dogum_tarihi is not null
2-Toplam kaç kişinin olduğu ve yaşların gruplara göre kaçar kişi olduğunun hesaplanması
Elde edilen değerler hangi yaş grubunda kaç kişi olduğunu vermeli.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
3-Bulunan bu toplam ve sayıların yüzde olarak hesaplanması
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.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
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
-
- Üye
- Mesajlar: 839
- Kayıt: 03 Eki 2007 02:00
Re: Yaş Yüzdesi Almak
Aşağıdaki Kod ile çözüldü işine yarayan arkadaş kendine göre uyarlayabilir.
herkesin cevabı için teşekkürler.
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