-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathGroupBy.sql
More file actions
197 lines (150 loc) · 7.09 KB
/
GroupBy.sql
File metadata and controls
197 lines (150 loc) · 7.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
-- GROUP BY --
/*
GROUP BY cümleciği bir SELECT ifadesinde satırları, sutunları değerlerine göre
özet olarak gruplamak için kullanılır.
GROUP BY cümleciği her grup başına satır döndürür
GROUP BY genelde, AVG(), COUNT(), MAX(), MIN() ve SUM() gibi aggregate fonsyonları ile
birlikte kullanılır
*/
/*
SQL GROUP BY komutu aynı değerlere sahip verileri gruplamamızı sağlar.
GROUP komutu verileri bir veya daha fazla sütunla gruplamak için toplama
işlevleri kullanır.(COUNT, MAX, MIN, SUM, AVG)
SELECT sütun_adı(s)
FROM tablo_adı
WHERE koşul
GROUP BY sütun_adı(s)
ORDER BY sütun_adı (s);
*/
CREATE TABLE manav
(
isim varchar(50),
urun_adi varchar(50),
urun_miktari int
);
INSERT INTO manav VALUES( 'Ali', 'Elma', 5);
INSERT INTO manav VALUES( 'Ayse', 'Armut', 3);
INSERT INTO manav VALUES( 'Veli', 'Elma', 2);
INSERT INTO manav VALUES( 'Hasan', 'Uzum', 4);
INSERT INTO manav VALUES( 'Ali', 'Armut', 2);
INSERT INTO manav VALUES( 'Ayse', 'Elma', 3);
INSERT INTO manav VALUES( 'Veli', 'Uzum', 4);
INSERT INTO manav VALUES( 'Ali', 'Armut', 2);
INSERT INTO manav VALUES( 'Veli', 'Elma', 3);
INSERT INTO manav VALUES( 'Ayse', 'Uzum', 4);
INSERT INTO manav VALUES( 'Ali', null, 2);
select * from manav;
create table personel
(id int primary key,
ad varchar(20),
soyad varchar(20),
yas int,
cinsiyet char,
sehir varchar(20),
ulke varchar(20),
maas int
);
insert into personel values(100, 'Eymen', 'Bal', '25', 'E', 'Istanbul', 'Turkiye', '20000');
insert into personel values(101, 'Derya', 'Soylu', '35', 'K', 'Istanbul', 'Turkiye', '25000');
insert into personel values(102, 'Enes', 'Boz', '55', 'E', 'Istanbul', 'Turkiye', '22000');
insert into personel values(103, 'Nil', 'Naz', '45', 'K', 'Trabzon', 'Turkiye', '20000');
insert into personel values(104, 'Ali', 'Can', '28', 'E', 'Ankara', 'Turkiye', '15000');
insert into personel values(105, 'Yusuf', 'Cengiz', '46', 'E', 'Bolu', 'Turkiye', '30000');
insert into personel values(106, 'Ahmet', 'Aslan', '38', 'E', 'Adana', 'Turkiye', '28000');
insert into personel values(107, 'Mehmet', 'Aslan', '29', 'E', 'Gaziantep', 'Turkiye', '21000');
insert into personel values(108, 'Sena', 'Yavuz', '49', 'K', 'New York', 'USA', '40000');
insert into personel values(109, 'Zehra', 'Amber', '52', 'K', 'New York', 'USA', '45000');
insert into personel values(110, 'Fatma', 'Nur', '33', 'K', 'Berlin', 'Almanya', '35000');
insert into personel values(111, 'Mustafa', 'Bay', '44', 'E', 'Paris', 'Fransa', '34000');
insert into personel values(112, 'Murat', 'Kerem', '28', 'E', 'Istanbul', 'Turkiye', '29000');
insert into personel values(113, 'Sinan', 'Ay', '45', 'E', 'Izmir', 'Turkiye', '19000');
insert into personel values(114, 'Figen', 'Bal', '55', 'K', 'Istanbul', 'Turkiye', '25000');
insert into personel values(115, 'Serkan', 'Bayram', '36', 'E', 'Londra', 'Ingiltere', '50000');
insert into personel values(116, 'Hakan', 'Bacak', '29', 'E', 'Londra', 'Ingiltere', '55000');
insert into personel values(117, 'Zafer', 'Yanak', '47', 'E', 'Berlin', 'Almanya', '42000');
insert into personel values(118, 'Birol', 'Kara', '37', 'E', 'Paris', 'Fransa', '41000');
insert into personel values(119, 'Ayten', 'Tan', '32', 'K', 'Roma', 'Italya', '39000');
select * from personel;
/*
SELECT sütun_adı(s)
FROM tablo_adı
WHERE koşul
GROUP BY sütun_adı(s)
ORDER BY sütun_adı (s);
*/
-- kisi ismine göre satılan toplam meyve miktarlarını
-- gösteren sorguyu yazınız.
select * from manav;
select isim, sum(urun_miktari) as toplam_urun
from manav
group by isim ;
-- satılan meyve türüne (urun_adi) göre urun alan kişi sayısını
--gösteren sorguyu yazınız. NULL olarak girilen meyveyi listelemesin.
select urun_adi, count(isim) as kisi_sayisi from manav -- satılan meyve türüne göre ürün adını sec
where urun_adi is not null -- koşul olarak null olanı vermesin
group by urun_adi; -- daha sonragrupladık
-- satılan meyve türüne (urun_adi) göre satılan (urun_miktari )MIN ve
-- MAX urun miktarlarini, MAX urun miktarina göre
-- sıralayarak listeyen sorguyu yazınız.
SELECT urun_adi, min(urun_miktari) as minimum_urun_mik, max(urun_miktari) as maksimum_urun_mik from manav
where urun_adi is not null
group by urun_adi
order by maksimum_urun_mik desc;---Order bay büyükten küçüge sıralamak için kullanılır
-- kisi ismine ve urun adına göre satılan ürünlerin toplamını gruplandıran
-- ve isime göre ters sırasıda listeyen sorguyu yazınız.
select isim, urun_adi, sum(urun_miktari) as toplam_urun from manav
group by isim, urun_adi ----group by' a yazdığınız kolonları from'dan önce yazmanız gerekir
order by isim desc;
select * from manav;
select * from personel;
-- personelin calıştığı ülkeleri listeleyiniz
select ulke from personel group by ulke;
select ulke, count(*) from personel group by ulke; ---- kişi sayısına göre sıralamayı getirdi
-- Ülkelere göre ortalama maaşları listeleyiniz
select ulke, round(avg(maas),2) as ortalama_maas --- ulkelere göre ortalama maası aldık ---virgulden sonraki iki basamak ı round ile aldık parantez icinde
from personel --- bunu personel den bul dedik
group by ulke; --- nasıl istediğimizi de group yaparak ülkelere göre yaptık
-- Maas ortalamasını bayanlar ve baylar olarak sorgulayınız
select cinsiyet, round(avg(maas)) as ortalama_maas
from personel
group by cinsiyet;
-- Personelin, ulkelere göre ve şehirlere göre gruplayarak sorgulayın
select ulke, sehir from personel
group by ulke, sehir;
----- select 'ten sonra ekranda görmek istedğimiz sütunları yazmak genel kural
-- Personelin, ulkelere göre ve şehirler göre calışan sayısını sorgulayın.
select ulke, sehir, count(sehir) as calisan_sayisi from personel
group by ulke, sehir;
-- Her ulke için bay ve bayan çalışan sayısı ve yaş ortalamasını
--sorgulayınız.
--- count(*) her ikisinide sıralamak istediğimizde böyle yaparız. count sayisi demek
select ulke, cinsiyet, count(*) as calisan_sayisi, round(avg(yas)) as yas_ortalamasi from personel
group by ulke, cinsiyet;
-- Her ulke için bay ve bayan çalışan sayısı ve yaş ortalamasını ve
-- maası 30000 den büyük olanları sorgulayınız.
select ulke, cinsiyet, round(avg(yas)) as ortalama_yas, count(*) from personel
where maas>30000
group by ulke, cinsiyet;
-- Her ulke için; bay ve bayan çalışan sayısı, yaş ortalamasını,
-- maaşı 30000 den büyük olanları ve ortalama yaşı
-- büyükten küçüğe doğru sıralayınız
-- ortalama avg ile alınır
select ulke, cinsiyet, round(avg(yas)) as ortalama_yas, count(*) from personel
where maas>30000
group by ulke, cinsiyet
order by ortalama_yas desc; ---- her ikisine göre
select ulke, cinsiyet, round(avg(yas)) as ortalama_yas, count(cinsiyet) from personel
where maas>30000
group by ulke, cinsiyet
order by ortalama_yas desc; ----- cinsiyete göre
select ulke, cinsiyet, round(avg(yas)) as ortalama_yas, count(ulke) from personel
where maas>30000
group by ulke, cinsiyet
order by ortalama_yas desc; --- ulke ye gore
/*
Oluşturacağımız tablodaki sütunlar ilk satir
Şartlar
Gruplamalar
Sıralamalar
Yazım şeklimizi bu şekilde standartlaştırabiliriz
*/