SQL GROUP BY és HAVING záradék példákkal

Tartalomjegyzék:

Anonim

Mi az az SQL csoport tagmondattal?

A GROUP BY záradék egy SQL parancs, amely azonos értékű sorok csoportosítására szolgál . A GROUP BY záradékot használjuk a SELECT utasításban. Opcionálisan összesítő függvényekkel együtt használva összefoglaló jelentéseket készíthet az adatbázisból.

Ezt teszi, összefoglalva az adatbázis adatait.

A GROUP BY záradékot tartalmazó lekérdezéseket csoportosított lekérdezéseknek nevezzük, és minden csoportosított elemhez csak egy sort adnak vissza.

SQL GROUP BY szintaxis

Most, hogy tudjuk, mi az SQL GROUP BY záradék, nézzük meg egy alapcsoport szintaxisát lekérdezésenként.

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

ITT

  • A "SELECT utasítások ..." a szokásos SQL SELECT parancs lekérdezés.
  • A " GROUP BY oszlopnév1" az a záradék, amely az oszlopnév1 alapján csoportosítást hajt végre.
  • "[, oszlop_neve2, ...]" nem kötelező; más oszlopneveket képvisel, ha a csoportosítás egynél több oszlopra történik.
  • A "[feltétel]" opcionális; a GROUP BY záradék által érintett sorok korlátozására szolgál. Hasonló a WHERE záradékhoz.

Csoportosítás egyetlen oszlop használatával

Annak érdekében, hogy megértsük az SQL Group By záradék hatását, hajtsunk végre egy egyszerű lekérdezést, amely az összes nem bejegyzést visszaadja a tagok táblájából.

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

Tegyük fel, hogy meg akarjuk kapni a nemek egyedi értékeit. A következő lekérdezést használhatjuk -

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

A fenti parancsfájl futtatása a MySQL munkaasztalon a Myflixdb-vel szemben a következő eredményeket adja.

 
gender
Female
Male

Vegye figyelembe, hogy csak két eredményt adtak vissza. Ennek oka az, hogy csak két nemtípus van férfi és nő. Az GROUP GROUP záradék az SQL-ben összesítette a "Férfi" tagokat, és csak egyetlen sort adott vissza hozzá. Ugyanezt tette a "Nő" tagokkal is.

Csoportosítás több oszlop használatával

Tegyük fel, hogy szeretnénk listát kapni a category_id filmről és a megfelelő évről, amelyben megjelentek.

Nézzük meg ennek az egyszerű lekérdezésnek a kimenetét

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

A fenti eredmény sok másolatot tartalmaz.

Végezzük el ugyanazt a lekérdezést a group by segítségével SQL-ben -

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

A fenti parancsfájl futtatása a MySQL munkapadban a myflixdb fájlhoz a következő eredményeket nyújtja nekünk.

 
category_id year_released
NULL 2008
NULL 2010
NULL 2012
1 2011
2 2008
6 2007
7 1920
8 1920
8 2005
8 2007

A GROUP BY záradék a kategóriaazonosítón és a kiadott éven egyaránt működik, hogy azonosítsa a fenti példánkban szereplő egyedi sorokat.

Ha a kategóriaazonos azonos, de a kiadott év eltér, akkor egy sort egyedi sornak tekintünk. Ha a kategóriaazonosító és a kiadott év egynél több sornál megegyezik, akkor duplikátumnak számít, és csak egy sor megmutatva.

Csoportosító és összesítő függvények

Tegyük fel, hogy a férfiak és nők teljes számát szeretnénk az adatbázisunkba. Ehhez az alábbi alábbi szkriptet használhatjuk.

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

A fenti parancsfájl futtatása a MySQL munkapadban a myflixdb fájlhoz a következő eredményeket adja.

 
gender COUNT('membership_number')
Female 3
Male 5

Az alább látható eredményeket minden egyedi nem szerinti érték szerint csoportosítjuk, és a csoportosított sorok számát a COUNT összesítő függvény segítségével számoljuk.

A lekérdezési eredmények korlátozása a HAVING záradék használatával

Nem mindig akarjuk csoportosítani az adott táblázat összes adatait. Vannak esetek, amikor az eredményeket egy bizonyos megadott kritériumokra akarjuk korlátozni. Ilyen esetekben használhatjuk a HAVING záradékot

Tegyük fel, hogy a 8. kategóriájú filmkiadási éveket szeretnénk tudni. Eredményeink eléréséhez a következő szkriptet használnánk.

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

A fenti szkript futtatása a MySQL munkaasztalon a Myflixdb-vel szemben az alábbi eredményeket nyújtja nekünk.

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

Ne feledje, hogy csak a 8. kategóriájú filmekre vonatkozik a GROUP BY záradék.

Összegzés

  • A GROUP BY Clause SQL az azonos értékű sorok csoportosítására szolgál.
  • A GROUP BY záradékot az SQL SELECT utasítással együtt használják.
  • A GROUP BY záradékban használt SELECT utasítás csak oszlopneveket, összesített függvényeket, konstansokat és kifejezéseket tartalmazhat.
  • Az SQL Having Clause a GROUP BY záradék által visszaadott eredmények korlátozására szolgál.
  • A MYSQL GROUP BY záradék több rekordból és egy vagy több oszlop által beállított visszaküldött rekord adatainak összegyűjtésére szolgál.