Sql Server

Sql Server max Fonksiyonu

Herkese merhaba, Sql Server yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda max() fonksiyonunu anlatacağım. Hadi başlayalım !

max() fonksiyonu bir tane parametre alıyor ve parametre olarak aldığı sütun içerisindeki en büyük değeri vermekte. En büyük değer derken sayısal bir sütun ise en büyük, metinsel bir sütun ise de alfabetik olarak en sondaki değeri söylüyor. Yani tablo içerisindeki bir sütunun içerisinde bulunan verileri arasındaki en büyük yada alfabetik olarak en sondaki veriyi söylüyor ve tüm tabloyu değil, sadece ilgili sütunu geriye döndürüyor. Ayrıca max() fonksiyonu where ile beraber kullanılamıyor çünkü where, max() gibi sütunlar üzerinde sayısal ve sıralama işlemlerini destekleyemiyor. Dolayısıyla max() fonksiyonunu sadece select ile bir tablo içinden seçim yapmak için kullanılmakta. max() fonksiyonunu kullanarak tablo içerisinden filtreleme yapmak için where yerine having kullanmak gerekiyor.

Örneğin int tipte id ve varchar tipte kitapAdi sütunları bulunan bir tablomuz olduğunu varsayalım. Bu tablo içerisinden max() fonksiyonu ile en büyük id’yi ve en büyük kitapAdi değerini getirmek için sırasıyla şu kodları yazmamız gerekiyor;

select max(id) from kitaplar;
select max(kitapAdi) from kitaplar;

max() fonksiyonunun bu şekilde kullanımında sadece tek veri döndürülmekte fakat çoklu veri döndürmek için group by ifadesini kullanmamız gerekiyor. Çünkü max() fonksiyonu normalde tek veri döndürüyor ama siz sorgu içerisinde max() fonksiyonunun yanına bir tane daha sütun adı yazarsanız yani çoklu veri gelsin istiyorum derseniz o zaman ortalık biraz karışıyor. Çünkü max() fonksiyonundan gelen verinin hangi satıra yazılacağına Sql Server karar veremiyor ve hata veriyor. Bunu önlemek için max() fonksiyonu ile beraber yazdığımız sütunu birde group by ile gruplarsak işte o zaman max() fonksiyonuda size çoklu cevap verebilir. Fakat vereceği çoklu veri, yaptığınız gruplama içerisindeki en büyük veri olacaktır. Örneğin kitaplar tablosunda id ve kitapAdi sütunlarını beraber getirelim.

select max(id), kitapAdi from kitaplar group by kitapAdi;

Gördüğünüz üzere id sütununu max() fonksiyonundan geçirdik ve ayrıca yanında birde kitapAdi sütunundaki verileri getir dedik. Son olarak kitapAdi sütununa göre gruplama yaparak max() fonksiyonunun kitapAdi sütunundaki gruplara göre çalışmasını istedik. Gruplar arasında çalıştığı için max() fonksiyonunun size getirdiği değerler tablodaki en büyük değer değil, üzerinde çalıştığı gruptaki en büyük değer olacaktır. Bu yüzden genelde tek başına kullanılmakta.

Başta da dediğim gibi max() fonksiyonu where ile beraber kullanılmayıp, having ile beraber kullanılmakta. where ifadesi max, max(), sum() gibi fonksiyonları destekleyemediği için bu fonksiyonlar için özel olarak having ifadesi oluşturulmuş ve bu fonksiyonları kullanarak filtreleme yapmak istediğinizde where yerine having kullanmamız gerekiyor. having ile kullanabilmek için de group by ile beraber kullanmamız gerekiyor. Çünkü max() fonksiyonu belirli bir grup içerisindeki veriler arasından en büyük veriyi getirdiği için siz tüm veriler arasından en büyüğünü getiremiyorsunuz, belli bir sütuna göre grupladıktan sonra getirebiliyorsunuz. Ayrıca max() fonksiyonu ile filtreleme yapmak istediğinizde tablo içerisindeki getirmek istediğiniz sütunları da group by ile gruplamanız gerekmekte. Yani select ile hangi sütunları yazdıysanız aynı sütunları group by ile de yazmanız gerekiyor. Örneğin kitaplar tablomuzdan şöyle 2 tane örnek yapalım;

select kitapAdi from kitaplar group by kitapAdi having max(id) > 5;
select kitapAdi, yazar from kitaplar group by kitapAdi, yazar having max(id) < 15;

İlk satırda sadece kitapAdi sütununu getirmek istediğimiz için group by ile kitapAdi yazdık fakat ikinci satırda kitapAdi ve yazar sütunlarını getirmek istediğimiz için group by ile hem kitapAdi hemde yazar sütunlarını yazdık. Sonuçlar üzerinde filtreleme yapabilmek için de having ile istediğimiz filtreyi yazdık.

Evet Sql Server’da max() fonksiyonunun kullanımı bu kadardı, tüm Sql Server yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu