Örneklerle SQL GROUP BY ve HAVING Cümlesi

Maddeye Göre SQL Grubu nedir?

GROUP BY deyimi, aşağıdakileri yapmak için kullanılan bir SQL komutudur: aynı değerlere sahip satırları gruplandırma. SELECT deyiminde GROUP BY deyimi kullanılır. İsteğe bağlı olarak veritabanından özet raporlar üretmek için toplu işlevlerle birlikte kullanılır.

Yaptığı şey budur. verileri özetleme veritabanından.

GROUP BY yan tümcesini içeren sorgulara gruplandırılmış sorgular denir ve gruplandırılmış her öğe için yalnızca tek bir satır döndürür.

SQL GROUP BY Söz Dizimi

Artık SQL GROUP BY yan tümcesinin ne olduğunu bildiğimize göre, temel sorguya göre grup sözdizimine bakalım.

SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition];

İŞTE

  • “SELECT ifadeleri…” standart SQL SELECT komut sorgusudur.
  • "GROUP BY sütun_adı1” sütun_adı1'e göre gruplamayı gerçekleştiren cümledir.
  • “[,sütun_adı2,…]” isteğe bağlıdır; Birden fazla sütun üzerinde gruplama yapıldığında diğer sütun adlarını temsil eder.
  • “[HAVING koşulu]” isteğe bağlıdır; GROUP BY deyiminden etkilenen satırları kısıtlamak için kullanılır. Şuna benzer WHERE yan tümcesi.

kullanarak gruplandırma Tek kolon

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 çalıştıralım.

SELECT `gender` FROM `members` ;
gender
Female
Female
Male
Female
Male
Male
Male
Male
Male

Cinsiyetler için benzersiz değerleri almak istediğimizi varsayalım. Aşağıdaki sorguyu kullanabiliriz –

SELECT `gender` FROM `members` GROUP BY `gender`;

Yukarıdaki betiğin çalıştırılması MySQL tezgâh Myflixdb'ye karşı yaptığımız karşılaştırma bize şu sonuçları veriyor.

gender
Female
Male

Yalnızca iki sonucun döndürüldüğünü unutmayın. Bunun nedeni, yalnızca Erkek ve Kadın olmak üzere iki cinsiyet tipimizin olmasıdır. SQL'deki GROUP BY cümlesi tüm "Erkek" üyeleri bir arada gruplandırdı ve bunun için yalnızca tek bir satır döndürdü. Aynısını “Kadın” üyeler için de yaptı.

Kullanarak gruplama çoklu sütun

Kategori_id filmlerinin ve bunların vizyona girdiği yılların bir listesini almak istediğimizi varsayalım.

Bu basit sorgunun çıktısını inceleyelim

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.

Aynı sorguyu SQL'de group by kullanarak çalıştıralım –

SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;

Yukarıdaki betiğin çalıştırılması MySQL workbench'ü myflixdb ile karşılaştırdığımızda aşağıdaki sonuçlar ortaya çıkıyor.

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 deyimi, tanımlamak için yayımlanan hem kategori kimliği hem de yıl üzerinde çalışır. benzersiz Yukarıdaki örneğimizdeki satırlar.

Kategori kimliği aynı ancak yayımlanan yıl farklıysa, bu durumda bir satır benzersiz bir satır olarak kabul edilir. Kategori kimliği ve yayımlanan yıl birden fazla satır için aynıysa bu durumda yinelenen bir satır olarak kabul edilir ve yalnızca bir satır gösterilir.

Gruplandırma ve toplama işlevleri

Diyelim ki veritabanımızdaki toplam erkek ve kadın sayısını istiyoruz. Bunu yapmak için aşağıda gösterilen betiği kullanabiliriz.

SELECT `gender`,COUNT(`membership_number`)  FROM `members` GROUP BY `gender`;

Yukarıdaki betiğin çalıştırılması MySQL workbench'ü myflixdb'ye karşı çalıştırdığımızda aşağıdaki sonuçlar ortaya çıkıyor.

gender COUNT('membership_number')
Female 3
Male 5

Aşağıda gösterilen sonuçlar, gönderilen her benzersiz cinsiyet değerine göre gruplandırılır ve gruplandırılmış satırların sayısı, COUNT toplama işlevi kullanılarak sayılır.

Sorgu sonuçlarını kullanarak kısıtlama HAVING fıkra

Belirli bir tablodaki tüm veriler üzerinde gruplamalar yapmak her zaman istemeyebiliriz. Sonuçlarımızı belirli bir kriterle sınırlamak isteyeceğimiz zamanlar olacaktır. Böyle durumlarda HAVING deyimini kullanabiliriz.

Diyelim ki 8 numaralı kategorideki filmin tüm yayın yıllarını bilmek istiyoruz. Sonuçlarımıza ulaşmak için aşağıdaki betiği kullanacağız.

SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;

Yukarıdaki betiğin çalıştırılması MySQL Myflixdb'ye karşı workbench'ü test ettiğimizde aşağıdaki sonuçlar ortaya çıkıyor.

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 hükmümüzden etkilendiğini unutmayın.

ÖZET

  • GROUP BY Clause SQL aynı değerlere sahip satırları gruplamak için kullanılır.
  • GROUP BY Maddesi aşağıdaki ifadeyle birlikte kullanılır: SQL SELECT ifadesi.
  • GROUP BY deyiminde kullanılan SELECT ifadesi yalnızca sütun adlarını, toplama işlevlerini, sabitleri ve ifadeleri içerecek şekilde kullanılabilir.
  • SQL'in Sahip Olması Cümlesi, GROUP BY deyiminin döndürdüğü sonuçları kısıtlamak için kullanılır.
  • MYSQL GROUP BY Clause, birden fazla kayıttan veri toplamak ve bir veya daha fazla sütun tarafından belirlenen kaydı döndürmek için kullanılır.

Bu yazıyı şu şekilde özetleyin: