forked from profnoah/CH11_SQL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
session-3.sql
140 lines (93 loc) · 3.97 KB
/
session-3.sql
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
/*===================================================
LIKE
====================================================*/
/* tracks tablosunda Composer sutunu Bach ile biten
kayıtların Name bilgilerini listeyen sorguyu yazınız*/
SELECT name,Composer
FROM tracks
WHERE Composer like '%Bach';
/* albulms tablosunda Title (başlık) sutununda Greatest
içeren kayıtların tüm bilgilerini listeyen sorguyu yazınız*/
SELECT *
FROM albums
WHERE Title LIKE '%Greatest%';
/* invoices tablosunda, 2010 ve 2019 arası bir tarihte (InvoiceDate)
Sadece şubat aylarında gerçekleşmiş olan faturaların tüm bilgilerini
listeleyen sorguyu yazınız*/
SELECT *
FROM invoices
WHERE InvoiceDate LIKE '201_-02%';
/* customers tablosunda, isimleri (FirstName) üç harfli olan müşterilerin
FirstName,LastName ve City bilgilerini listeleyen sorguyu yazınız*/
SELECT FirstName,LastName,City
FROM customers
WHERE FirstName LIKE '___';
/* customers tablosunda, soyisimleri Sch veya Go ile başlayan
müşterilerin FirstName, LastName ve City bilgilerini listeleyen
sorguyu yazınız*/
SELECT FirstName, LastName, City
FROM customers
WHERE LastName LIKE 'sch%' OR LastName LIKE 'go%';
/*===================================================
AGGREGATE FUNCTION COUNT,SUM,MIN,MAX, AVG)
====================================================*/
-- COUNT
------------------------------------------------------------------------------
/* invoices tablosunda kaç adet fatura bulunduğunu döndüren sorgu yazınız */
SELECT count(*) -- tamamını sayar (null dahildir)
FROM invoices;
SELECT count(BillingState) -- NULL olanlar sayılmaz.
FROM invoices;
SELECT count(*) as num_of_null
FROM invoices
WHERE BillingState IS NULL;
/* tracks tablosunda kaç adet farklı Composer bulunduğunu döndüren sorguyu yazınız*/
SELECT count(DISTINCT Composer) as num_of_composer
FROM tracks ;
-- MIN,MAX
-------------------------------------------------------------------------------------------------
/* tracks tablosundaki şarkı süresi en kısa olan şarkının adını ve süresi listeleyen
sorguyu yaziniz */
SELECT name as song_name, MIN(Milliseconds)/1000.0 as min_duration_sc
FROM tracks;
/*students tablosundaki en düşük ve en yüksek notu listeleyen sorguyu yazınız */
SELECT MIN(Grade) as min_grade ,MAX(grade) as max_grade
FROM students;
-- SUM,AVG
-------------------------------------------------------------------------------------------------
/* invoices tablosundaki faturaların toplam değerini listeyiniz */
SELECT ROUND(SUM(total)) as total_amount
FROM invoices;
/* invoices tablosundaki faturaların ortalama değerini listeyiniz */
SELECT ROUND(AVG(total),3) as avg_amount
FROM invoices;
/* tracks tablosundaki şarkıların ortalama süresinden daha uzun olan
şarkıların adlarını listeleyiniz */
SELECT AVG(Milliseconds) as avg_duration
FROM tracks;
SELECT name, Milliseconds
FROM tracks
WHERE Milliseconds > 393599.22;
/*Bu yöntem hard-coded olduğu için çok mantıklı bir çözüm değil.
alt-sorgu(sub-query) ile daha doğru bir yaklaşım olacaktır sonraki
bölümlerde alt-sorguyu ayrıntılı bir şekilde inceleyeceğiz.*/
SELECT name, Milliseconds
FROM tracks
WHERE Milliseconds > (SELECT avg(Milliseconds) FROM tracks) ;
/*===================================================
GROUP BY
====================================================*/
/* tracks tablosundaki her bir Bestecisinin (Composer)
toplam şarkı sayısını Besteci adına göre gruplandırarak
listeleyen sorguyu yazınız. */
SELECT Composer, Count(name)
FROM tracks
WHERE Composer IS NOT NULL
GROUP BY Composer;
/* invoices tablosundaki her bir ülkenin (BillingCountry)
fatura ortalamalarını hesaplayan ve ülke bilgileri ile
listeleyen sorguyu yazınız.*/
SELECT BillingCountry, ROUND(AVG(total), 2) as avg_amount
FROM invoices
WHERE InvoiceDate BETWEEN '2009-01-01' AND '2011-12-31 00:00:00'
GROUP BY BillingCountry;