Oracle分组语句解析多列分组having过滤聚合函数应用(oracle.分组语句)

Oracle分组语句解析:多列分组、HAVING过滤、聚合函数应用

在Oracle数据库中,分组语句是非常重要的一部分,它可以将查询结果按照指定的列进行分组,并对每个分组进行聚合计算。本文将介绍多列分组、HAVING过滤以及聚合函数应用等三个方面。

1. 多列分组

在Oracle中,可以按照一个或多个列进行分组。例如,有一张学生表,其中有学生姓名、年龄、性别、所在班级等字段,我们可以使用以下语句按照性别和班级进行分组:

SELECT sex, class, COUNT(*) FROM student

GROUP BY sex, class;

上述代码中,GROUP BY关键字后面的sex, class表示按照性别和班级进行分组,使用COUNT(*)函数对每个分组进行计数。运行结果类似于下面的表格:

| sex | class | COUNT(*) |

| — | —– | ——– |

| 男 | 1班 | 25 |

| 男 | 2班 | 20 |

| 女 | 1班 | 30 |

| 女 | 2班 | 25 |

需要注意的是,分组时需要使用所有非聚合列,否则会出现“not a GROUP BY expression”错误。

2. HAVING过滤

HAVING过滤功能可以对分组后的结果进行过滤,类似于WHERE语句对整个表的过滤,只不过HAVING是针对于分组后的结果进行过滤。例如,有一个sales表,其中包括日期、销售员、销售额三个字段,我们可以使用以下语句找出销售额超过5000的销售员及其销售额:

SELECT salesman, SUM(sales) FROM sales

GROUP BY salesman

HAVING SUM(sales)>5000;

上述代码中,GROUP BY关键字后面的salesman表示按照销售员进行分组,使用SUM(sales)函数对每个分组进行销售额计算,而HAVING关键字后面的SUM(sales)>5000则表示只保留销售额大于5000的记录。运行结果类似于下面的表格:

| salesman | SUM(sales) |

| ——- | ———- |

| 张三 | 6500 |

| 李四 | 5200 |

需要注意的是,HAVING过滤只能使用聚合函数,不能使用非聚合函数或非聚合列。

3. 聚合函数应用

聚合函数在分组语句中经常用到,它们可以对每组数据进行计算,并返回一个单一的值作为结果。Oracle提供了许多聚合函数,例如SUM、AVG、MAX、MIN、COUNT等等。下面是一个使用聚合函数的例子,假设有一张orders表,其中包括客户、商品、数量、单价等字段,我们可以使用以下语句计算每个客户的总销售额和平均单价:

SELECT customer, SUM(quantity*price), AVG(price) FROM orders

GROUP BY customer;

上述代码中,GROUP BY关键字后面的customer表示按照客户进行分组,使用SUM(quantity*price)函数对每个分组进行销售额计算,使用AVG(price)函数计算每个分组的平均单价。运行结果类似于下面的表格:

| customer | SUM(quantity*price) | AVG(price) |

| ——– | ——————- | ———- |

| A公司 | 28000 | 40.2 |

| B公司 | 52000 | 55.0 |

需要注意的是,聚合函数只能作用于单列或单个列的组合,否则会出现“not a SINGLE GROUP function”错误。

本文介绍了Oracle分组语句的三个重要方面:多列分组、HAVING过滤以及聚合函数应用。正确使用这些语句可以大大提升查询效率,并得到准确的查询结果。


数据运维技术 » Oracle分组语句解析多列分组having过滤聚合函数应用(oracle.分组语句)