Клауза SQL GROUP BY и HAVING с примери

Съдържание:

Anonim

Какво представлява SQL Group by Clause?

Клаузата GROUP BY е SQL команда, която се използва за групиране на редове, които имат същите стойности . Клаузата GROUP BY се използва в оператора SELECT. По желание се използва заедно с обобщени функции за създаване на обобщени отчети от базата данни.

Това прави, обобщавайки данните от базата данни.

Заявките, които съдържат клаузата GROUP BY, се наричат ​​групирани заявки и връщат само един ред за всеки групиран елемент.

SQL GROUP BY Синтаксис

Сега, след като знаем каква е клаузата SQL GROUP BY, нека разгледаме синтаксиса на основна група по заявка.

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

ТУК

  • "SELECT оператори ..." е стандартната заявка за команди на SQL SELECT.
  • " GROUP BY column_name1" е клаузата, която извършва групирането на базата на column_name1.
  • „[, column_name2, ...]“ не е задължително; представлява други имена на колони, когато групирането се извършва в повече от една колона.
  • „[HAVING condition]“ не е задължително; той се използва за ограничаване на редовете, засегнати от клаузата GROUP BY. Подобно е на клаузата WHERE.

Групиране с помощта на една колона

За да помогнем да разберем ефекта от клаузата на SQL Group By, нека изпълним проста заявка, която връща всички записи на пола от таблицата на членовете.

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

Да предположим, че искаме да получим уникалните стойности за половете. Можем да използваме следната заявка -

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

Изпълнението на горния скрипт в MySQL workbench срещу Myflixdb ни дава следните резултати.

 
gender
Female
Male

Обърнете внимание, че са върнати само два резултата. Това е така, защото имаме само два типа пол - мъжки и женски. Клаузата GROUP BY в SQL групира всички членове "Мъжки" заедно и върна само един ред за нея. Същото направи и с членовете на "Жената".

Групиране с помощта на множество колони

Да предположим, че искаме да получим списък на филма category_id и съответните години, в които са пуснати.

Нека наблюдаваме резултата от тази проста заявка

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

Горният резултат има много дубликати.

Нека изпълним една и съща заявка, използвайки group by в SQL -

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

Изпълнението на горния скрипт в MySQL workbench срещу myflixdb ни дава следните резултати, показани по-долу.

 
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 действа както на идентификатора на категорията, така и на издадената година, за да идентифицира уникални редове в горния ни пример.

Ако идентификаторът на категорията е еднакъв, но издадената година е различна, тогава ред се третира като уникален. Ако идентификаторът на категорията и освободената година са еднакви за повече от един ред, тогава се счита за дубликат и само за един ред е показан.

Групиране и агрегирани функции

Да предположим, че искаме общия брой мъже и жени в нашата база данни. Можем да използваме следния скрипт, показан по-долу, за да го направим.

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

Изпълнението на горния скрипт в MySQL workbench срещу myflixdb ни дава следните резултати.

 
gender COUNT('membership_number')
Female 3
Male 5

Показаните по-долу резултати са групирани по всяка публикувана уникална стойност на пола и броят на групираните редове се отчита с помощта на обобщаващата функция COUNT.

Ограничаване на резултатите от заявката с помощта на клаузата HAVING

Не винаги ще искаме да извършим групиране на всички данни в дадена таблица. Ще има моменти, когато ще искаме да ограничим резултатите си до определени критерии. В такива случаи можем да използваме клаузата HAVING

Да предположим, че искаме да знаем всички години на издаване за идентификатор на категория 8. Филм. Ще използваме следния сценарий, за да постигнем нашите резултати.

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

Изпълнението на горния скрипт в MySQL workbench срещу Myflixdb ни дава следните резултати, показани по-долу.

 
movie_id title director year_released category_id
9 Honey mooners John Schultz 2005 8
5 Daddy's Little Girls NULL 2007 8

Обърнете внимание, че само филмите с категория id 8 са засегнати от нашата клауза GROUP BY.

Обобщение

  • Клаузата GROUP BY SQL се използва за групиране на редове със същите стойности.
  • Клаузата GROUP BY се използва заедно с оператора SQL SELECT.
  • Операторът SELECT, използван в клаузата GROUP BY, може да се използва само съдържа имена на колони, обобщени функции, константи и изрази.
  • Клауза за наличие на SQL се използва за ограничаване на резултатите, върнати от клаузата GROUP BY.
  • Клаузата MYSQL GROUP BY се използва за събиране на данни от множество записи и върнат запис, зададен от една или повече колони.