|
| 1 | + |
| 2 | +--Aggragete Function Example |
| 3 | + |
| 4 | +--1952 ile 1960 yılları arasında doğan çalışanlarımın adı ve soyadını tek bir sütunda, ünvanını ve doğum tarihini listeleyin |
| 5 | +--Not: Employees tablosunda Birthdate bilgisi 1948-12-08 00:00:00.000 şekilnde tutulmuş. Buradan yıl bilgisini söküp almak için SQL içerisinde gömül olarak bulunan (built-in) Year() fonksiyonunu kullanacağız. |
| 6 | + |
| 7 | +select EmployeeID, |
| 8 | + (FirstName+' '+LastName) as [Full Name], |
| 9 | + YEAR(BirthDate) as [Birth Year], |
| 10 | + Title |
| 11 | +from Employees |
| 12 | +where YEAR(BirthDate) between 1952 and 1960 |
| 13 | + |
| 14 | +--Yaşı 60'dan büyük olan çalışanları listeleyiniz |
| 15 | +--DateDiff() => Yaş hesaplarken kullanabileceğimiz bir built-in methodtur. |
| 16 | + |
| 17 | +select (FirstName+' '+LastName) as [Full Name], |
| 18 | + YEAR(BirthDate) as [Birth Year], |
| 19 | + DATEDIFF("YY", BirthDate, GETDATE()) as Age |
| 20 | +from Employees |
| 21 | +where DATEDIFF("YY", BirthDate, GETDATE()) > 60 |
| 22 | +--Not: DATEDIFF() => Fonksiyonu içerisine parametre olarak verilen BirthDate ve GetDate() değerlerinden ilk parametre olarak verdiğimiz değere göre "YY" bilgisini alarak çıkartacak. |
| 23 | + |
| 24 | + |
| 25 | +select GETDATE() -- System saatini yani bize anı teslim eder |
| 26 | + |
| 27 | + |
| 28 | +--Çalışanların Id'si 2 ile 5 arasında olan kullanıcıları FirstName'lerine göre a'dan z'ye sıralayınız |
| 29 | +select (FirstName+' '+LastName) as [FullName], |
| 30 | + Title, |
| 31 | + DATEDIFF("YY", BirthDate, GETDATE()) as Age |
| 32 | +from Employees |
| 33 | +where EmployeeID between 2 and 5 |
| 34 | +order by FirstName asc --Not: Order by ile asc kullanmaya gerek yoktur. Çünkü order by deyiminin varsayılan (default) değeri "asc"dir. |
| 35 | + |
| 36 | + |
| 37 | +--Aggragete Function |
| 38 | +--Sum() => İçerisine parametre olarak verilen değeri toplar |
| 39 | +select Sum(EmployeeID) as [Id'lerin Toplamı] from Employees |
| 40 | +
|
| 41 | +--Toplam stok durumu nedir? |
| 42 | +select Sum(UnitsInStock) as [Total Stock] from Products |
| 43 | +
|
| 44 | +--Order Details tablosundan faydalanarak, siparişlerin toplam tutarı |
| 45 | +select Sum(Quantity * UnitPrice * (1 - Discount)) from [Order Details] |
| 46 | +
|
| 47 | +--Çalışanların yaşlarının toplamı |
| 48 | +select SUM(DATEDIFF("YY", BirthDate, GetDate())) as [Total Age] from Employees |
| 49 | +
|
| 50 | +--Count() => Sorgu sonucunda dönen veri kümesinin satır sayısını sayar |
| 51 | +select COUNT(*) as [Toplam Çalışan Sayısı] from Employees |
| 52 | +
|
| 53 | +--Toplamda kaç sipariş gerçekleştirmişim (Order) |
| 54 | +select COUNT(OrderId) from Orders |
| 55 | +
|
| 56 | +--Kaç farklı şehirde oturan çalışanım var |
| 57 | +select Count(distinct City) from Employees |
| 58 | +--Not: "distinct" anahtar sözcüğü ile count fonksiyonu içeriisnde kullanılan parametredeki sütun içerisinde ki tekrar eden satırları görmezden gelir. |
| 59 | +--Uyarı: Count() fonksiyonunu kullanırken çok dikkatli olmalıyız. Şayet Count içerisine vereceğimiz parametrede tekrar eden değerler var ise çok yanlış sonuçlar elde edebiliriz. |
| 60 | +
|
| 61 | +--Average() => Ortamayı hesaplar |
| 62 | +
|
| 63 | +--Çalışanların yaşlarının ortalamasını bulalım |
| 64 | +select Avg(DATEDIFF("YY", BirthDate, GETDATE())) from Employees |
| 65 | +
|
| 66 | +--Siparişleirmden elde ettiğim gelirin ortalaması |
| 67 | +select Cast(Avg(Quantity * UnitPrice * (1 - Discount)) as smallmoney) from [Order Details] |
| 68 | +
|
| 69 | +--Min() & Max() |
| 70 | +select Min(UnitsInStock) from Products |
| 71 | +select Max(UnitsInStock) from Products |
| 72 | +
|
| 73 | +--En genç çalışan ve En yaşlı çalışanı bulun |
| 74 | +select Min(DATEDIFF("YY", BirthDate, GETDATE())) as [En Küçük Çalışan], |
| 75 | + MAX(DATEDIFF("YY", BirthDate, GetDate())) as [En Büyük Çalışan] from Employees |
| 76 | +
|
| 77 | +--Group By: Sorgu sonucunda dönen veri kümesi üzerinde gruplama işlemleri yapmka için kullanılır. Aggregate function kullanıldığında select alaında birdan fazla sütun varsa sorgu sonucunda bu sütunlardan herhangi birine göre gruplama yapmak gerekmektedir. Burada ki düşünce mantığımızı şöylede kurabiliriz. Group by kullandığımda verdiğim parametreyi select alanında da kullanmalıyım. |
| 78 | +
|
| 79 | +--hangi category altında kaç ürünüm var |
| 80 | +select CategoryID, |
| 81 | + COUNT(*) as Adet |
| 82 | +from Products |
| 83 | +group by CategoryID |
| 84 | +
|
| 85 | +select ProductID, CategoryID, ProductName from Products where CategoryID = 1 |
| 86 | +
|
| 87 | +--UnitPrice 35'den büyük olan kaç tane ürünüm var ve bu ürünleri Categorilerine göre gruplayınız |
| 88 | +select CategoryID, |
| 89 | + COUNT(*) as Adet -- burada count her bir CategoryId için çalışacak |
| 90 | +from Products |
| 91 | +where UnitPrice > 35 |
| 92 | +group by CategoryID |
| 93 | + |
| 94 | + |
| 95 | +--Her bir siparişten ne kadar para kazanmışım? (Her siparişin tutarına göre gruplayınız) |
| 96 | +select OrderID, |
| 97 | + Sum(Quantity * UnitPrice * (1- Discount)) as [Sipariş Tutarı] -- burada aggregate function her bir orderıd için çalışacak |
| 98 | +from [Order Details] |
| 99 | +group by OrderID |
| 100 | +order by [Sipariş Tutarı] desc |
| 101 | + |
| 102 | +--Ürün baş harfi A-K aralığında olan, stok bilgisi 5 ile 50 arasında olan ürünleri kategorilerine göre gruplayınız. Elde edilen adet sayısına göre çoktan aza sıralayınız |
| 103 | +select CategoryID, |
| 104 | + Count(*) as Adet |
| 105 | +from Products |
| 106 | +where (ProductName like '[A-K]%') and |
| 107 | + (UnitsInStock between 5 and 50) |
| 108 | +group by CategoryID |
| 109 | +order by Adet Desc |
| 110 | + |
| 111 | +select CategoryID, |
| 112 | + Count(*) as Adet |
| 113 | +from Products |
| 114 | +where (ProductName between 'A%' and 'K%') and |
| 115 | + (UnitsInStock between 5 and 50) |
| 116 | +group by CategoryID |
| 117 | +order by Adet Desc |
| 118 | + |
| 119 | +--Ingilterede oturan kadınların, adı , soyadı birleştirerek, ünvanı, ülkesi, doğum tarihini listeliyinz |
| 120 | +select EmployeeID, |
| 121 | + (FirstName+SPACE(1)+LastName) as [Full Name], |
| 122 | + Title, |
| 123 | + TitleOfCourtesy |
| 124 | +from Employees |
| 125 | +where (Country = 'UK') |
| 126 | +and |
| 127 | +(TitleOfCourtesy = 'Mrs.' or TitleOfCourtesy = 'Ms.') |
| 128 | +and |
| 129 | +(FirstName like 'A%') |
| 130 | + |
| 131 | +--Unvanı Mr. olanlar veya yaşı 60'tan büyük olanların, Id, Adı, Soyadı, Doğum Tarihi, ünvanı bilgilerini getirin |
| 132 | +select (TitleOfCourtesy+SPACE(1)+FirstName+SPACE(1)+LastName) as [Full Name], |
| 133 | + ( |
| 134 | + Cast(YEAR(BirthDate) as varchar) |
| 135 | + +'.'+ |
| 136 | + Cast(MONTH(BirthDate) as varchar) |
| 137 | + +'.'+ |
| 138 | + Cast(DAY(BirthDate) as varchar) |
| 139 | + ) as [Birth Date] |
| 140 | +from Employees |
| 141 | +where (TitleOfCourtesy = 'Mr.') |
| 142 | +or |
| 143 | +(DATEDIFF("YY", BirthDate, GETDATE()) > 60) |
| 144 | + |
| 145 | +--Region bilgisi olmayan çalışanları listeleyin |
| 146 | +select * from Employees where Region is null |
| 147 | + |
| 148 | +--Alfabetik olarak Janet ve Robert arasında olan çalışaçanları listeleyin |
| 149 | +select FirstName, |
| 150 | + LastName |
| 151 | +from Employees |
| 152 | +where FirstName between 'Janet' and 'Robert' |
| 153 | +order by FirstName |
| 154 | + |
| 155 | +--Fosil olan çalışalı bulalım |
| 156 | +select Top 1 FirstName+SPACE(1)+LastName as [Full Name], |
| 157 | + YEAR(BirthDate) as Age |
| 158 | +from Employees |
| 159 | +order by Age asc |
| 160 | + |
| 161 | +--Hangi ülkede kaç çalışalım var |
| 162 | +select Country, |
| 163 | + COUNT(*) as [Employee Count] |
| 164 | +from Employees |
| 165 | +--where Country is not null -- çalıştığımız tabloda null alanlar varsa muhakak bu where mantığıda düşünülmelidir |
| 166 | +group by Country |
| 167 | + |
| 168 | +--Having |
| 169 | +--Sorgu sonucunda dönen veri kümesi üzerinde Aggreagete Fonksiyonlara bağlı olarak filtreleme işlemlerinde kullanılır. Şayet sorguda aggregate function yoksa where kullanılabilinir. Aggregate function sonucunda dönen veri kümesi üzerinde filtreleme için where kullanılamaz. |
| 170 | + |
| 171 | +--Hangi category altındaki ürünlerin stok miktarıları 400'ün altındadır |
| 172 | +select CategoryID, |
| 173 | + Sum(UnitsInStock) as [Stock] |
| 174 | +from Products |
| 175 | +group by CategoryID |
| 176 | +having Sum(UnitsInStock) < 400 |
| 177 | +order by Stock desc |
| 178 | + |
| 179 | +--Her bir siparişteki toplam ürün sayısı 200 üzerinde olan siparişleri listeleyiniz |
| 180 | +select OrderID, |
| 181 | + Sum(Quantity) as [Total Product] |
| 182 | +from [Order Details] |
| 183 | +group by OrderID |
| 184 | +having Sum(Quantity) > 200 |
| 185 | +order by [Total Product] desc |
| 186 | + |
| 187 | +--Toplam Tutarı 2500 ile 3500 arasında olan siparileri sıralayalım |
| 188 | +select OrderID, |
| 189 | + Cast(Sum(Quantity * UnitPrice * (1 - Discount)) as decimal) as [Total Income] |
| 190 | +from [Order Details] |
| 191 | +group by OrderID |
| 192 | +having Sum(Quantity * UnitPrice * (1 - Discount)) between 2500 and 3500 |
| 193 | +order by 2 desc |
0 commit comments