Postgre一些集合查询函数:AVG、COUNT、MAX、MIN、SUM

 2015年09月27日    7694     声明


在数据统计的时候,大多不需要返回详细数据,而只是对数据进行一些分析和汇总。在PostgreSQL中,提供了一些查询函数,可以方便的对数据进行分析、汇总等,如:统计数据总数,对某个字段进行总和查询,最大值、最小值、平均值的判断等。下面是PostgreSQL中一些常用的查询函数。

函数名 函数功能
AVG() 计算平均值
COUNT() 计算总行数
MAX() 计算最大值
MIN() 计算最小值
SUM() 计算和


1. 使用AVG()计算平均值

AVG()函数用于计算指定列数据的平均值。例如,从产品表products中查询平均价格:

# SELECT AVG(price) avg_price FROM products;

AVG()函数查询时,可以指定WHERE条件及GROUP BY子句,进行分组查询。例如,查询某几个分类sort_id的平均价格:

# SELECT sort_id, AVG(price) avg_price FROM products WHERE sort_id in(1,2,3) GROUP BY sort_id;
# 查询结果如下
 sort_id |       avg_price       
---------+-----------------------
       1 |   10.0000000000000000
       2 | 5088.0000000000000000
       3 | 2288.0000000000000000
(3 rows)


2. 使用COUNT()计算总行数

COUNT()函数用于计算表的总行数或某列包含数据的总行数。该函数有以下两种用途:

  • COUNT(*),计算表的总行数
  • COUNT(字段名),计算表中某列的总行数,计算时会忽略字段值为空的行

例如,计算产品表products的总行数:

# SELECT COUNT(*) FROM products;
 count 
-------
     4
(1 row)

例如,计算产品表products,价格price不为空总行数:

# SELECT COUNT(price) FROM products;
 count 
-------
     3
(1 row)


COUNT()函数查询时,也可以指定WHERE条件及GROUP BY子句,进行分组查询。例如,查询某几个分类sort_id下各自的行数:

# SELECT sort_id, COUNT(*) FROM products WHERE sort_id IN(2, 3, 4) GROUP BY sort_id;
 sort_id | count 
---------+-------
       2 |     1
       3 |     1
       4 |     1
(3 rows)


3. 使用MAX()计算最大值

MAX()函数用于返回指定列中的最大值。例如,查询产品表products中价格最高的产品:

# SELECT MAX(price) FROM products;
 max  
------
 5088
(1 row)

MAX()函数查询时,也可以指定WHERE条件及GROUP BY子句以查询分组中的。例如,查询某几个分类sort_id下的最大价格:

# SELECT sort_id, MAX(price) FROM products WHERE sort_id in(1, 2, 3) GROUP BY sort_id;
 sort_id | max  
---------+------
       1 |   10
       2 | 5088
       3 | 2288
(3 rows)


4. 使用MIN()计算最小值

MIN()函数用于返回指定列中的最小值。例如,查询产品表products中价格最低的产品:

# SELECT MIN(price) FROM products;
 min 
-----
  10
(1 row)

MIN()函数查询时,也可以指定WHERE条件及GROUP BY子句以查询分组中的。例如,查询某个分类sort_id下的最低价格:

# SELECT sort_id sort_id, MIN(price) FROM products WHERE sort_id = 2 GROUP BY sort_id;
 sort_id | min  
---------+------
       2 | 5088
(1 row)


5. 使用SUM()计算总和

前面介绍COUNT()函数可以返回总行数,如果要返回指定列的总和就需要使用SUM()函数。例如,计算产品表products的总价格:

# SELECT SUM(price) FROM products;
 sum  
------
 7386
(1 row)

与前面介绍的其它分组查询函数一样,SUM()函数也可以在查询时指定WHERE条件及GROUP BY子句以查询分组中的。例如,查询某个分类sort_id下的最低价格:

# SELECT sort_id, SUM(price) FROM products WHERE sort_id = 3 GROUP BY sort_id;
 sort_id | sum  
---------+------
       3 | 2288
(1 row)