Maddeye göre SQL Grubu nedir?
GROUP BY yan tümcesi, aynı değerlere sahip satırları gruplamak için kullanılan bir SQL komutudur . GROUP BY yan tümcesi, SELECT deyiminde kullanılır. İsteğe bağlı olarak, veritabanından özet raporlar üretmek için toplama işlevleriyle birlikte kullanılır.
Veritabanındaki verileri özetleyerek yaptığı budur .
GROUP BY yan tümcesini içeren sorgular, gruplanmış sorgular olarak adlandırılır ve her gruplanmış öğe için yalnızca tek bir satır döndürür.
SQL GROUP BY Sözdizimi
Artık SQL GROUP BY cümlesinin ne olduğunu bildiğimize göre, sorguya göre temel bir grubun sözdizimine bakalım.
SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];
İŞTE
- "SELECT deyimleri…" standart SQL SELECT komut sorgusudur.
- " GROUP BY column_name1" gruplandırmayı sütun_adı1 temelinde gerçekleştiren cümledir.
- "[, sütun_adı2,…]" isteğe bağlıdır; gruplama birden fazla sütunda yapıldığında diğer sütun adlarını temsil eder.
- "[ŞART VAR]" isteğe bağlıdır; GROUP BY yan tümcesinden etkilenen satırları kısıtlamak için kullanılır. WHERE cümlesine benzer.
Tek Sütun Kullanarak Gruplama
SQL Group By cümlesinin etkisini anlamaya yardımcı olmak için, üyeler tablosundaki tüm cinsiyet girişlerini döndüren basit bir sorgu yürütelim.
SELECT `gender` FROM `members` ;
gender |
---|
Female |
Female |
Male |
Female |
Male |
Male |
Male |
Male |
Male |
Cinsiyetler için benzersiz değerleri elde etmek istediğimizi varsayalım. Aşağıdaki sorguyu kullanabiliriz -
SELECT `gender` FROM `members` GROUP BY `gender`;
Yukarıdaki komut dosyasını MySQL çalışma tezgahında Myflixdb ile çalıştırmak bize aşağıdaki sonuçları verir.
gender |
---|
Female |
Male |
Yalnızca iki sonucun döndürüldüğünü unutmayın. Bunun nedeni, sadece Erkek ve Kadın cinsiyet tipimiz olmasıdır. SQL'deki GROUP BY deyimi, tüm "Erkek" üyeleri bir arada gruplandırdı ve bunun için yalnızca tek bir satır döndürdü. Aynı şeyi "Kadın" üyeler için de yaptı.
Birden çok sütun kullanarak gruplama
Film category_id ve bunların piyasaya sürüldüğü ilgili yılların bir listesini almak istediğimizi varsayalım.
Bu basit sorgunun çıktısını gözlemleyelim
SELECT `category_id`,`year_released` FROM `movies` ;
category_id | year_released |
---|---|
1 | 2011 |
2 | 2008 |
NULL | 2008 |
NULL | 2010 |
8 | 2007 |
6 | 2007 |
6 | 2007 |
8 | 2005 |
NULL | 2012 |
7 | 1920 |
8 | NULL |
8 | 1920 |
Yukarıdaki sonucun birçok kopyası var.
SQL'de group by kullanarak aynı sorguyu çalıştıralım -
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
Yukarıdaki komut dosyasını MySQL çalışma tezgahında myflixdb ile çalıştırmak bize aşağıda gösterilen aşağıdaki sonuçları verir.
category_id | year_released |
---|---|
NULL | 2008 |
NULL | 2010 |
NULL | 2012 |
1 | 2011 |
2 | 2008 |
6 | 2007 |
7 | 1920 |
8 | 1920 |
8 | 2005 |
8 | 2007 |
GROUP BY cümlesi, yukarıdaki örneğimizde benzersiz satırları tanımlamak için hem kategori kimliği hem de serbest bırakılan yıl üzerinde çalışır .
Kategori kimliği aynıysa ancak yayınlandığı yıl farklıysa, bir satır benzersiz olarak değerlendirilir. Kategori kimliği ve serbest bırakılan yıl birden fazla satır için aynıysa, yinelenen ve yalnızca bir satır olarak kabul edilir. gösterilir.
Gruplama ve toplama işlevleri
Veritabanımızda toplam erkek ve kadın sayısını istediğimizi varsayalım. Bunu yapmak için aşağıda gösterilen aşağıdaki komut dosyasını kullanabiliriz.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
Yukarıdaki betiği MySQL çalışma tezgahında myflixdb ile çalıştırmak bize aşağıdaki sonuçları verir.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Aşağıda gösterilen sonuçlar, yayınlanan her benzersiz cinsiyet değerine göre gruplandırılır ve gruplanan satırların sayısı COUNT toplama işlevi kullanılarak sayılır.
HAVING yan tümcesini kullanarak sorgu sonuçlarını kısıtlama
Her zaman belirli bir tablodaki tüm veriler üzerinde gruplama yapmak istemeyeceğiz. Sonuçlarımızı belirli bir kriterle sınırlandırmak isteyeceğimiz zamanlar olacaktır. Bu gibi durumlarda HAVING cümlesini kullanabiliriz
8 numaralı film kategorisinin tüm yayın yıllarını bilmek istediğimizi varsayalım. Sonuçlarımıza ulaşmak için aşağıdaki komut dosyasını kullanacağız.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
Yukarıdaki komut dosyasını MySQL çalışma tezgahında Myflixdb ile çalıştırmak bize aşağıda gösterilen aşağıdaki sonuçları verir.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
9 | Honey mooners | John Schultz | 2005 | 8 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
Yalnızca kategori kimliği 8 olan filmlerin GROUP BY maddemizden etkilendiğini unutmayın.
Özet
- GROUP BY Clause SQL, satırları aynı değerlerle gruplamak için kullanılır.
- GROUP BY Yan Tümcesi, SQL SELECT deyimi ile birlikte kullanılır.
- GROUP BY yan tümcesinde kullanılan SELECT deyimi yalnızca sütun adlarını, toplama işlevlerini, sabitleri ve ifadeleri içerebilir.
- SQL Having Clause, GROUP BY cümlesi tarafından döndürülen sonuçları kısıtlamak için kullanılır.
- MYSQL GROUP BY Clause, birden çok kayıttan veri toplamak için kullanılır ve bir veya daha fazla sütun tarafından döndürülen kayıt kümesini döndürür.