English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL GROUP BY clause

In questo tutorial, imparerai come raggruppare le righe in base ai valori delle colonne.

righe raggruppate

GROUP BY in congiunzione conSELECTespressioni efunzioni aggregateusati insieme, per raggruppare le righe in base ai valori delle colonne comuni

Per facilitare la comprensione di questo punto, diamo un'occhiata a quanto segueemployeesedepartments表。

+--------+--------------+------------+---------+
| emp_id | emp_name     | hire_date  | dept_id |
+--------+--------------+------------+---------+
| | 1 | Ethan Hunt | 2001-05-01 | 4 |
| | 2 | Tony Montana | 2002-07-15 | 1 |
| | 3 | Sarah Connor | 2005-10-18 | 5 |
| | 4 | Rick Deckard | 2007-01-03 | 3 |
| | 5 | Martin Blank | 2008-06-24 | NULL |
+--------+--------------+------------+---------+

+---------+------------------+
| dept_id | dept_name |
+---------+------------------+
| | 1 | Administration |
| | 2 | Customer Service |
| | 3 | Finance |
| | 4 | Human Resources |
| | 5 | Sales | |
+---------+------------------+
Tabella: employees
Tabella: departments

Ora, non si cerca solo il nome del dipendente e del dipartimento in cui lavora, ma si cerca anche il numero totale di dipendenti in ogni dipartimento.

Per tabelle di piccole dimensioni, è possibile applicare semplicementeUnione a sinistraCalcolare il numero di dipendenti, ma supponiamo che se una tabella contiene migliaia di dipendenti, non sarà così facile.

In questo caso, è possibile utilizzare la clausola GROUP BY insieme all'istruzione SELECT, come segue:

SELECT t1.dept_name, count(t2.emp_id) AS total_employees
FROM departments AS t1 LEFT JOIN employees AS t2
ON t1.dept_id = t2.dept_id
GROUP BY t1.dept_name;

Se eseguite l'istruzione sopra, otterrete l'output seguente:

+-------------------+-----------------+
| dept_name | | total_employees |
+-------------------+-----------------+
| Administration | | | | 1 |
| Customer Service  |               0 |
| Finance           |               1 |
| Human Resources   |               1 |
| Sales             |               1 |
+-------------------+-----------------+

Nel capitolo successivo, imparerai come utilizzare la clausola HAVING e la clausola GROUP BY per specificare le condizioni di ricerca per i gruppi o l'aggregazione.

Attenzione:in SQL SELECTnell'istruzione, la clausola GROUP BY deve apparire dopo FROM eWHEREdopo la clausola e appare inORDER BYPrima di ciò.