阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      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 表,数据内容如下:

      axihedb# 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 字段值进行分组,找出每个人的工资总额:

      axihedb=# 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 字段值进行分组,找出每个客户的工资总额:

      axihedb=# 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 子句一起使用:

      axihedb=#  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)
      
      目录
      目录