了解分组查询
在Oracle中,分组查询是非常常见的一种数据查询方式,它可以将数据按照某些条件进行分组,并对每个分组进行聚合计算,从而得到需要的结果。这种查询方式常用于统计分析或者数据汇总操作中。
以下是一个简单的示例:
SELECT department, SUM(salary) FROM employees GROUP BY department;
上面的SQL语句会将employees表按照department列进行分组,并计算每个组内的salary总和。
分组条件
按列名分组
最常见的分组方式就是按照列名进行分组,这也是上面示例中使用的方式。
SELECT column1, column2, SUM(column3) FROM table GROUP BY column1, column2;
以上SQL语句会将table表按照column1和column2列进行分组,并计算每个组内的column3总和。
按表达式分组
除了可以按照列名进行分组外,还可以按照表达式进行分组。
SELECT CASE WHEN column1 > 10 THEN '大于10' ELSE '小于等于10' END AS expr, SUM(column2) FROM table GROUP BY CASE WHEN column1 > 10 THEN '大于10' ELSE '小于等于10' END;
以上SQL语句会将table表按照当column1大于10时返回“大于10”,否则返回“小于等于10”的表达式进行分组,并计算每个组内的column2总和。
聚合函数
在分组查询中,通常需要对每个分组进行一些聚合计算,Oracle提供了很多聚合函数供使用。
COUNT函数
COUNT函数用于计算某一列的行数。
SELECT department, COUNT(*) FROM employees GROUP BY department;
以上SQL语句会将employees表按照department列进行分组,并统计每个组内的行数。
SUM函数
SUM函数用于计算某一列的和。
SELECT department, SUM(salary) FROM employees GROUP BY department;
以上SQL语句会将employees表按照department列进行分组,并计算每个组内的salary总和。
AVG函数
AVG函数用于计算某一列的平均值。
SELECT department, AVG(salary) FROM employees GROUP BY department;
以上SQL语句会将employees表按照department列进行分组,并计算每个组内的salary平均值。
MAX和MIN函数
MAX和MIN函数用于计算某一列的最大值和最小值。
SELECT department, MAX(salary), MIN(salary) FROM employees GROUP BY department;
以上SQL语句会将employees表按照department列进行分组,并计算每个组内的salary最大值和最小值。
HAVING子句
HAVING子句用于在分组查询中对分组结果进行过滤。
SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 5000;
以上SQL语句会将employees表按照department列进行分组,并计算每个组内的salary平均值。最后,只返回平均值大于5000的组。
总结
分组查询是非常常见的一种数据查询方式,在Oracle中使用非常方便。通过本文的介绍,您应该已经掌握了分组条件、聚合函数和HAVING子句的使用方法。