PostgreSQL GROUP BY Statement
In PostgreSQL,GROUP BYThe statement is used together with the SELECT statement to group identical data.
In a SELECT statement, GROUP BY is placed after the WHERE clause and before the ORDER BY clause.
Syntax
Below is the basic syntax of the GROUP BY clause:SELECT column-list FROM table_name WHERE [ conditions ] GROUP BY column1, column2....columnN ORDER BY column1, column2....columnN
The GROUP BY clause must be placed after the conditions in the WHERE clause, and must be placed before the ORDER BY clause.
In the GROUP BY clause, you can group by one or more columns, but the columns being grouped must exist in the column list.
Example
Create the COMPANY table (Download COMPANY SQL file), the data content is as follows:
exampledb# select * from COMPANY; id | name | age | address | salary ----+-------+-----+-----------+-------- 1 | Paul | 32 | California| 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | South-Hall| 45000 7 | James | 24 | Houston | 10000 (7 rows)
The following example groups by the NAME field value to find each person's total salary:
exampledb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;
The following results are obtained:
name | sum -------+------- Teddy | 20000 Paul | 20000 Mark | 65000 David | 85000 Allen | 15000 Kim | 45000 James | 10000 (7 rows)
Now we add three records to the CAMPANY table using the following statement:
INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00); INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00); INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00);
Now the COMPANY table contains duplicate names, and the data is as follows:
id | name | age | address | salary ----+-------+-----+--------------+-------- 1 | Paul | 32 | California | 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | South-Hall | 45000 7 | James | 24 | Houston | 10000 8 | Paul | 24 | Houston | 20000 9 | James | 44 | Norway | 5000 10 | James | 45 | Texas | 5000 (10 rows)
Now group by the values of the NAME field to find the total salary for each customer:
exampledb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
The results obtained at this point are as follows:
name | sum -------+------- Allen | 15000 David | 85000 James | 20000 Kim | 45000 Mark | 65000 Paul | 40000 Teddy | 20000 (7 rows)
The following example uses the ORDER BY clause together with the GROUP BY clause:
exampledb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;
The following results are obtained:
name | sum -------+------- Teddy | 20000 Paul | 40000 Mark | 65000 Kim | 45000 James | 20000 David | 85000 Allen | 15000 (7 rows)other extensions