CodeGym/Java kursus/All lectures for DA purposes/Gruppering efter flere kolonner

Gruppering efter flere kolonner

Ledig

4.1 Gruppering af kolonner

Hvad der også er meget vigtigt er, at hvis du grupperer poster, så kan du i afsnittet SELECTkun angive de kolonner, som dataene er grupperet efter.

Dukan ikkeskriv en typeforespørgsel og angiv SELECTnavnekolonnen i sektionen :

SELECT brand, name
FROM product
GROUP BY brand

Du har en masse rækker i produkttabellen med navnefeltet , og det er ikke klart, hvilken række du skal erstatte her. Tænk igen: du vil vide antallet af produkter fra hvert mærke, og hvordan den resulterende tabel kan få navnet på produktet?

Hvis du bruger operatoren GROUP BY, så kan normale rækker ikke komme ind i dit resultat, men kun kolonner som data grupperes efter og "beregnede kolonner", som f.eks.COUNT(*)

4.2 Gruppering efter beregnede kolonner

Men du kan gruppere efter flere kolonner og endda efter beregnede kolonner. Eksempel:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

Og resultatet af denne forespørgsel:

ansættelsesår Total
2012 1
2013 1
2014 1
2015 2
2018 1

Lad os analysere vores anmodning.

I medarbejdertabellen har hver medarbejder en unik ansættelsesdato, så gruppering af data efter den vil ikke fungere - der vil være én post for hver dato, og gruppering vil ikke give meget mening. Men flytter vi fra ansættelsesdatoen til ansættelsesåret, så kan det godt være en situation, hvor virksomheden ansatte flere medarbejdere i samme år.

Lad os se igen, hvordan denne tabel vil se ud før gruppering:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	join_date
FROM employee

Og resultatet af denne forespørgsel:

id navn ansættelsesår join_date
1 Ivanov Ivan 2012 2012-06-30
2 Petrov Petr 2013 2013-08-12
3 Ivanov Sergey 2014 2014-01-01
4 Rabinovich Moisha 2015 2015-05-12
5 Kirienko Anastasia 2015 2015-10-10
6 Vaska 2018 2018-11-11

Men denne resulterende tabel kan grupperes efter hire_year og finde ud af, hvor mange personer der blev ansat i et bestemt år.

4.3 Gruppering efter flere kolonner

Lad os nu prøve at finde ud af, hvor mange medarbejdere vi har ansat i hver måned hvert år. For at gøre dette skal vi tilføje ikke ét, men to beregnede felter til forespørgslen på én gang - lejeåret (hyre_år) og lejemåneden (hyre_måned).

Lad os skrive en forespørgsel som denne:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	join_date
FROM employee

Og resultatet af denne forespørgsel:

id navn ansættelsesår leje_måned join_date
1 Ivanov Ivan 2012 6 2012-06-30
2 Petrov Petr 2013 8 2013-08-12
3 Ivanov Sergey 2014 1 2014-01-01
4 Rabinovich Moisha 2015 5 2015-05-12
5 Kirienko Anastasia 2015 10 2015-10-10
6 Vaska 2018 elleve 2018-11-11

Hvis vi grupperer dataene i denne resultattabel efter måned, så grupperer vi simpelthen folk i grupper, uanset hvilket år de blev ansat. Og vi har brug for, at den resulterende tabel har tre kolonner: år, måned og antallet af ansatte.

For at gøre dette, efter operatøren, GROUP BYskal du bruge navnet på ikke en kolonne, men to. Eksempel:

SELECT
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month

Og resultatet af denne forespørgsel:

ansættelsesår leje_måned Total
2012 6 1
2013 8 1
2014 1 1
2015 5 1
2015 10 1
2018 elleve 1

Vi har få poster i tabellen, så der er enheder overalt i totalkolonnen. Og bemærk i øvrigt, at jo flere kolonner vi grupperer efter, jo flere rækker har vi i resultatet.

Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu