SQL Bilenler

emubaltaci

Rektör
Emektar
Katılım
21 Kasım 2005
Mesajlar
18,863
Reaksiyon puanı
129
Puanları
243
arkadaşlar sizden bu konuda yardımcı olmanızı istiyorum SQL bilenler özellikle....
şimdi benim "anket" adında bir veritabanım var aşağıdaki şekilde


By emubaltaci

anketimde cinsiyet ve meslek adı altında iki sütün var görüldüğü üzere
ben sorgumda her meslek grubu için (Örn.: memur olup Erkek olan 5 kişi gibi) cinsiyet sayısını yazacak ve bunların hepsini tek bir tabloda gösterecek bir sorgu istiyorum
yani;
İşçi - Memur - Emekli
Erkek sayısı: 2 3 1

şeklinde

ben tek bir tanesi için yapıp sonucu bulabiliyorum. bu kodda asagıda sorunu daha ii anlayın die yazıyorum

Kod:
SELECT Count(anket.cinsiyet) AS sonuc1
FROM anket
WHERE (((anket.meslek)="İşçi") AND ((anket.cinsiyet)="ERKEK"));

bu kodu her meslek grubu için tek tek yapıp bir tek tabloda gösterecek yani işçi Sonuc1, memur sonuc2 gibi sütünlar acacak
 

Turab Garip

Dekan
Emektar
Müdavim
Katılım
30 Mayıs 2007
Mesajlar
6,902
Reaksiyon puanı
181
Puanları
1,243
Aslında bu işin piri Arbalot'tur, ben kendi bildiğim yöntemle yazayım, bir bilen daha etkili bir yöntem biliyorsa paylaşsın biz de öğrenelim.

Şu şekilde bir sorgu çalıştırmayı dene:
Kod:
SET @Memur_erkek = ( SELECT count( cinsiyet ) 
FROM anket
WHERE meslek='Memur' AND cinsiyet='ERKEK' ) ;
SET @Isci_erkek = ( SELECT count( cinsiyet ) 
FROM anket
WHERE meslek='İşçi' AND cinsiyet='ERKEK' ) ;
SET @Evhanimi_kadin = ( SELECT count( cinsiyet ) 
FROM anket
WHERE meslek='Evhanimi' AND cinsiyet='KADIN' ) ;
SELECT @Memur_erkek, @Isci_erkek, @Evhanimi_kadin;

Bu kod, şu çıktıyı vermeli:
Kod:
Memur_erkek -- Isci_erkek -- Evhanimi_kadin
12 -- 21 -- 14

Rakamları örnekledim, burada amaç, Memur ve erkek olanların sayısını bir sütunda, İşçi ve erkek olanların sayısını bir sütunda, Evhanımı ve kadın olanların sayısını bir sütunda ve bu üç sütunun hepsini aynı tabloda göstermek. Meslek ve cinsiyet gruplarını değiştirebilir ve arttırabilirsin. Örneğin bir satır daha yazarak, aynı tabloda öğrenci erkeklerin sayısını da gösterebilirsin.

Umarım istediğin buydu. Yoksa bekle Arbalot gelsin. :)
 

emubaltaci

Rektör
Emektar
Katılım
21 Kasım 2005
Mesajlar
18,863
Reaksiyon puanı
129
Puanları
243
geçersiz sql değimi hatası veriyor elmacık :) yinede tsk.ler ben arbolat ı bekliyim en iyisi
 

Zebedee

Öğrenci
Katılım
18 Ağustos 2006
Mesajlar
79
Reaksiyon puanı
0
Puanları
0
SELECT Meslek, cinsiyet, Count(*) FROM anket
group by Meslek, cinsiyet

-----------

Sonuç aşağıdaki gibi görüntülenmeli
Memur Erkek 5
Emeklli Erkek 2
...
...
 

emubaltaci

Rektör
Emektar
Katılım
21 Kasım 2005
Mesajlar
18,863
Reaksiyon puanı
129
Puanları
243
SELECT Meslek, cinsiyet, Count(*) FROM anket
group by Meslek, cinsiyet

-----------

Sonuç aşağıdaki gibi görüntülenmeli
Memur Erkek 5
Emeklli Erkek 2
...
...
erkek kadın karısık verdi bu verdigin kod
Çıktı aşağıdaki gibi



sadece erkekler için nasıl yaparım birde değer içermiyen meslek gruplarınıda listelemesini istiyorum. yani memur olup erkek çalışan yoksa onuda sıfır olarak göstersin
img.php
 

Zebedee

Öğrenci
Katılım
18 Ağustos 2006
Mesajlar
79
Reaksiyon puanı
0
Puanları
0
SELECT Meslek, cinsiyet, Count(*) FROM anket
where cinsiyet = 'ERKEK'
group by Meslek, cinsiyet


sadece erkekleri gruplar... sıfır olarak görmek istedigin kayitlari için ise biraz düşünmem lazim.
 

emubaltaci

Rektör
Emektar
Katılım
21 Kasım 2005
Mesajlar
18,863
Reaksiyon puanı
129
Puanları
243
SELECT Meslek, cinsiyet, Count(*) FROM anket
where cinsiyet = 'ERKEK'
group by Meslek, cinsiyet


sadece erkekleri gruplar... sıfır olarak görmek istedigin kayitlari için ise biraz düşünmem lazim.
biraz düşünürsen memnun kalacam
isnull kullanılabilirmi?
 

Zebedee

Öğrenci
Katılım
18 Ağustos 2006
Mesajlar
79
Reaksiyon puanı
0
Puanları
0
Kod:
select distinct a.meslek, 
  'ERKEK' as cinsiyet, 
  (select count(*) from anket b where cinsiyet = 'ERKEK' and b.meslek = a.meslek) 
from anket a

-----------------

FireBird veritabaninda sorunsuz ve dogru olarak çalışıyor... Access bunu çaliştirabilir mi fikrim yok..
 

emubaltaci

Rektör
Emektar
Katılım
21 Kasım 2005
Mesajlar
18,863
Reaksiyon puanı
129
Puanları
243
Kod:
select distinct a.meslek, 
  'ERKEK' as cinsiyet, 
  (select count(*) from anket b where cinsiyet = 'ERKEK' and b.meslek = a.meslek) 
from anket a
-----------------

FireBird veritabaninda sorunsuz ve dogru olarak çalışıyor... Access bunu çaliştirabilir mi fikrim yok..
kod olarak çalıştı fakat benim 8 meslegim var cıktı olarak 5 meslek verdi :sorry2: geri kalan 3 meslek nerde :smartass:
 

32.sefo

Doçent
Katılım
1 Ekim 2007
Mesajlar
613
Reaksiyon puanı
2
Puanları
0
kod olarak çalıştı fakat benim 8 meslegim var cıktı olarak 5 meslek verdi :sorry2: geri kalan 3 meslek nerde :smartass:
geri kalan 3 meslektekiler erkek olmadığı için çıkmamış olabilir :wassat: Bende deniyorum şimdi :sweatdrop:
 

emubaltaci

Rektör
Emektar
Katılım
21 Kasım 2005
Mesajlar
18,863
Reaksiyon puanı
129
Puanları
243
geri kalan 3 meslektekiler erkek olmadığı için çıkmamış olabilir :wassat: Bende deniyorum şimdi :sweatdrop:
peki sunu soracam sana
benim soru1,soru2,soru3,soru4 ve soru5 olmak üzere tablomda 5 soru var. bu sorulara 0 ile 4 arasında puan veriyorum.
sorum su;
soru1 e 0 puan verenlerin sayısı?
soru1 e 1 puan verenlerin sayısı?
.
.
.
soru1 e 0 puan....?
.
.

bunu nasıl paparım tek bir tabloda
 

32.sefo

Doçent
Katılım
1 Ekim 2007
Mesajlar
613
Reaksiyon puanı
2
Puanları
0
öncelikle her soruyu aynı tabloda kullanmak biraz karmaşık geldi bana Çünkü sorgu

Kod:
SELECT count(sifir) as [0], count(bir) as 1, count(iki) as 2, count(uc) as 3, count(4) as 4 from soru1
boyle, her soru için bir tablo açılırsa daha net görünüyor =):wacko:

adszwc1.jpg


sonuc da aşagıdaki gibi oldu

adsz2am5.jpg
 

emubaltaci

Rektör
Emektar
Katılım
21 Kasım 2005
Mesajlar
18,863
Reaksiyon puanı
129
Puanları
243
öncelikle her soruyu aynı tabloda kullanmak biraz karmaşık geldi bana Çünkü sorgu

Kod:
SELECT count(sifir) as [0], count(bir) as 1, count(iki) as 2, count(uc) as 3, count(4) as 4 from soru1
boyle, her soru için bir tablo açılırsa daha net görünüyor =):wacko:

adszwc1.jpg


sonuc da aşagıdaki gibi oldu

adsz2am5.jpg

bak simdi benim tablom asagıdaki sekilde



görüldüğü üzere benim saymak istedigim soru1 e verilen "4" puanların sayısı yani tabloda kaç tane verilmiş mesela soru1 e dört tane "4" puan verilmiş iki tane "3" verilmiş, iki tane "1" puan, üç tane "2" puan verilmiş, sıfır tane "0" puan verilmiş
 

32.sefo

Doçent
Katılım
1 Ekim 2007
Mesajlar
613
Reaksiyon puanı
2
Puanları
0
select *, count(soru1) as [soru 1'e 4 verenler] from anket where soru1= 4

bu sorguda soru1 e 4 verenlerin tüm bilgileri ve soru1 e 4 verenlerin sayısı görünür. Fakat sen bunun yanına soru1' e 3 verenleri vb vb.. de gostermek istiyosun.. çok kafa karıştırdı bu sorgu =)
 

emubaltaci

Rektör
Emektar
Katılım
21 Kasım 2005
Mesajlar
18,863
Reaksiyon puanı
129
Puanları
243
select *, count(soru1) as [soru 1'e 4 verenler] from anket where soru1= 4

bu sorguda soru1 e 4 verenlerin tüm bilgileri ve soru1 e 4 verenlerin sayısı görünür. Fakat sen bunun yanına soru1' e 3 verenleri vb vb.. de gostermek istiyosun.. çok kafa karıştırdı bu sorgu =)
işte ben soru1 için verilen puanların hepsini bir yerde görmek istiyorum
kod biliyorsan olayı anlaman yeterli oluyor. bende mantıgı kurmaya calısıyorum ve kod bilmyiorum :D
 

Zebedee

Öğrenci
Katılım
18 Ağustos 2006
Mesajlar
79
Reaksiyon puanı
0
Puanları
0
select distinct 'Sayilar',
(select count(soru1) from anket where soru1 = 0) as soru1_0,
(select count(soru1) from anket where soru1 = 1) as soru1_1,
(select count(soru1) from anket where soru1 = 2) as soru1_2,
(select count(soru1) from anket where soru1 = 3) as soru1_3,
(select count(soru1) from anket where soru1 = 4) as soru1_4,
(select count(soru1) from anket where soru1 = 5) as soru1_5,

(select count(soru2) from anket where soru2 = 0) as soru2_0,
(select count(soru2) from anket where soru2 = 1) as soru2_1,
(select count(soru2) from anket where soru2 = 2) as soru2_2,
(select count(soru2) from anket where soru2 = 3) as soru2_3,
(select count(soru2) from anket where soru2 = 4) as soru2_4,
(select count(soru2) from anket where soru2 = 5) as soru2_5

from anket
 

32.sefo

Doçent
Katılım
1 Ekim 2007
Mesajlar
613
Reaksiyon puanı
2
Puanları
0
:wassat:distinct:wassat::wassat: o nerden cıktı yha :D:D =) oluyomu ki acaba böyle_?
 

emubaltaci

Rektör
Emektar
Katılım
21 Kasım 2005
Mesajlar
18,863
Reaksiyon puanı
129
Puanları
243
select distinct 'Sayilar',
(select count(soru1) from anket where soru1 = 0) as soru1_0,
(select count(soru1) from anket where soru1 = 1) as soru1_1,
(select count(soru1) from anket where soru1 = 2) as soru1_2,
(select count(soru1) from anket where soru1 = 3) as soru1_3,
(select count(soru1) from anket where soru1 = 4) as soru1_4,
(select count(soru1) from anket where soru1 = 5) as soru1_5,

(select count(soru2) from anket where soru2 = 0) as soru2_0,
(select count(soru2) from anket where soru2 = 1) as soru2_1,
(select count(soru2) from anket where soru2 = 2) as soru2_2,
(select count(soru2) from anket where soru2 = 3) as soru2_3,
(select count(soru2) from anket where soru2 = 4) as soru2_4,
(select count(soru2) from anket where soru2 = 5) as soru2_5

from anket
çalıştı bu kod zebede saol buna bir sey daha eklemek istiyorum hani hizmet sutunundakilere göre sıralasın yani bu kodu sole edebilirmiyiz
select count (soru2) from anket where soru2=0 and hizmet='Diğer' as soru2_0
 

Turab Garip

Dekan
Emektar
Müdavim
Katılım
30 Mayıs 2007
Mesajlar
6,902
Reaksiyon puanı
181
Puanları
1,243
geçersiz sql değimi hatası veriyor elmacık :) yinede tsk.ler ben arbolat ı bekliyim en iyisi

Aslında ben deneyip yazdım, hatta sayıp sağlamasını bile yapmıştım yanlış yönlendirme olmasın diye; malum konuda uzman değilim çünkü. :)

Belki de MySQL sürümüne göre çift parantez olması gerekiyordur. select ifadelerini bir paranteze daha alarak deneyebilirsin.

Gerçi Zebedee de iyi bir SQL vermiş.

emubaltaci dedi ki:
yani bu kodu sole edebilirmiyiz
select count (soru2) from anket where soru2=0 and hizmet='Diğer' as soru2_0

Yapabilirsin, yalnız dizim hatalı. Şöyle olmalı:
SELECT COUNT(soru2) as soru2_0 FROM anket WHERE soru2=0 AND hizmet='Diğer'
 

32.sefo

Doçent
Katılım
1 Ekim 2007
Mesajlar
613
Reaksiyon puanı
2
Puanları
0
çalıştı bu kod zebede saol buna bir sey daha eklemek istiyorum hani hizmet sutunundakilere göre sıralasın yani bu kodu sole edebilirmiyiz
select count (soru2) from anket where soru2=0 and hizmet='Diğer' as soru2_0

sıralama kodun sonuna
Kod:
order by hizmet
olarak yapılır diye biliyorum; a dan z ye sıralama.. yanlıs mı anladım yoksa?
 

emubaltaci

Rektör
Emektar
Katılım
21 Kasım 2005
Mesajlar
18,863
Reaksiyon puanı
129
Puanları
243
saolun arkadaşlar büyük ölçüde çözüldü sorunum :D ama bu sorgu bitmez yardmlarınızı bekliyorum ilerdede ;)
 

32.sefo

Doçent
Katılım
1 Ekim 2007
Mesajlar
613
Reaksiyon puanı
2
Puanları
0
burdayız emu abi =) okulda öğrendikçe yardımcı olmaya çalışıcaz :happy:
 

32.sefo

Doçent
Katılım
1 Ekim 2007
Mesajlar
613
Reaksiyon puanı
2
Puanları
0
(Lise3 te) hoca derse önem verenlere özel olarak sql anlattı. Son 2 ay sql veritabanı + visual basic gördük. Tam ısınıyoduk konulara okul bitti :wassat::D:D
 

emubaltaci

Rektör
Emektar
Katılım
21 Kasım 2005
Mesajlar
18,863
Reaksiyon puanı
129
Puanları
243
:stuart:
(Lise3 te) hoca derse önem verenlere özel olarak sql anlattı. Son 2 ay sql veritabanı + visual basic gördük. Tam ısınıyoduk konulara okul bitti :wassat::D:D
oda güzel bu yazı ii değerlendirmişsindir umarm
 
Üst