PostgreSQL 教程
1. PostgreSQL 教程 2. Linux 上安装 PostgreSQL 3. Windows 上安装 PostgreSQL 4. Mac OS 上安装 PostgreSQL 5. PostgreSQL 语法 6. PostgreSQL 数据类型 7. PostgreSQL 创建数据库 8. PostgreSQL 选择数据库 9. PostgreSQL 删除数据库 10. PostgreSQL 创建表格 11. PostgreSQL 删除表格 12. PostgreSQL 模式(SCHEMA) 13. PostgreSQL INSERT INTO 语句 14. PostgreSQL SELECT 语句 15. PostgreSQL 运算符 16. PostgreSQL 表达式 17. PostgreSQL WHERE 子句 18. PostgreSQL AND & OR 运算符 19. PostgreSQL UPDATE 语句 20. PostgreSQL DELETE 语句 21. PostgreSQL LIKE 子句 22. PostgreSQL LIMIT 子句 23. PostgreSQL ORDER BY 语句 24. PostgreSQL GROUP BY 语句 25. PostgreSQL WITH 子句 26. PostgreSQL HAVING 子句 27. PostgreSQL DISTINCT 关键字 28. PostgreSQL 约束 29. PostgreSQL 连接(JOIN) 30. PostgreSQL UNION 操作符 31. PostgreSQL NULL 值 32. PostgreSQL 别名 33. PostgreSQL 触发器 34. PostgreSQL 索引 35. PostgreSQL ALTER TABLE 命令 36. PostgreSQL TRUNCATE TABLE 37. PostgreSQL View(视图) 38. PostgreSQL TRANSACTION(事务) 39. PostgreSQL LOCK(锁) 40. PostgreSQL 子查询 41. PostgreSQL AUTO INCREMENT(自动增长) 42. PostgreSQL PRIVILEGES(权限) 43. PostgreSQL 时间/日期函数和操作符 44. PostgreSQL 常用函数

PostgreSQL GROUP BY 语句

PostgreSQL GROUP BY 语句

在 PostgreSQL 中,GROUP BY 语句和 SELECT 语句一起使用,用来对相同的数据进行分组。

GROUP BY 在一个 SELECT 语句中,放在 WHRER 子句的后面,ORDER BY 子句的前面。

语法

下面给出了 GROUP BY 子句的基本语法:
SELECT column-list

FROM table_name

WHERE [ conditions ]

GROUP BY column1, column2....columnN

ORDER BY column1, column2....columnN

GROUP BY 子句必须放在 WHERE 子句中的条件之后,必须放在 ORDER BY 子句之前。

在 GROUP BY 子句中,你可以对一列或者多列进行分组,但是被分组的列必须存在于列清单中。

实例

创建 COMPANY 表(下载 COMPANY SQL 文件 ),数据内容如下:

db# 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)

下面实例将根据 NAME 字段值进行分组,找出每个人的工资总额:

db=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;

得到以下结果:

  name  |  sum

 -------+-------

  Teddy | 20000

  Paul  | 20000

  Mark  | 65000

  David | 85000

  Allen | 15000

  Kim   | 45000

  James | 10000

(7 rows)

现在我们添加使用下面语句在 CAMPANY 表中添加三条记录:

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);

现在 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

   8 | Paul  |  24 | Houston      |  20000

   9 | James |  44 | Norway       |   5000

  10 | James |  45 | Texas        |   5000

(10 rows)

现在再根据 NAME 字段值进行分组,找出每个客户的工资总额:

db=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;

这时的得到的结果如下:

name  |  sum

-------+-------

 Allen | 15000

 David | 85000

 James | 20000

 Kim   | 45000

 Mark  | 65000

 Paul  | 40000

 Teddy | 20000

(7 rows)

下面实例将 ORDER BY 子句与 GROUP BY 子句一起使用:

db=#  SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;

得到以下结果:

name  |  sum

-------+-------

 Teddy | 20000

 Paul  | 40000

 Mark  | 65000

 Kim   | 45000

 James | 20000

 David | 85000

 Allen | 15000

(7 rows)