Oracle示例详解分组数据

1. 概述

分组数据是SQL中非常重要的计算功能之一。通过将数据分组,我们可以在每个组内执行聚合函数操作,例如求和、平均值、最大/最小值等。在Oracle中,GROUP BY子句是用于分组数据的关键字。

2. GROUP BY语法

GROUP BY子句作用于SELECT语句的结果集,按指定的列对结果进行分组。它的基本语法如下:

SELECT column1, column2, ... 

FROM table_name

WHERE condition

GROUP BY column1, column2, ...

ORDER BY column_name;

其中,column1, column2, ... 是要进行分组的列名,condition是WHERE子句中筛选条件的逻辑表达式,ORDER BY子句指定结果排序的列名和排序方向(ASC为升序,DESC为降序)。

3. GROUP BY示例

我们以以下示例表格为例,通过GROUP BY语句演示如何按City列对数据进行分组:

Name City Salary
Tom Beijing 5000
Jerry Shanghai 6000
Alice Beijing 7000
Bob Shanghai 5500

3.1 按City列分组

以下是按City列对数据进行分组的SQL语句:

SELECT City, SUM(Salary) 

FROM Employee

GROUP BY City;

查询结果如下:

City SUM(Salary)
Beijing 12000
Shanghai 11500

以上SQL语句通过SUM函数对Salary列进行求和,得到每个City的Salary总和,并对结果进行分组。

3.2 按多个列分组

以下是按City和Name列对数据进行分组的SQL语句:

SELECT City, Name, SUM(Salary) 

FROM Employee

GROUP BY City, Name;

查询结果如下:

City Name SUM(Salary)
Beijing Alice 7000
Beijing Tom 5000
Shanghai Bob 5500
Shanghai Jerry 6000

以上SQL语句在GROUP BY子句中指定了两个列名,分别对City和Name列进行分组,并使用SUM函数对Salary列进行求和。

4. HAVING语法

HAVING子句是用于对分组后的结果进行筛选的关键字,它可以在GROUP BY子句之后使用。

与WHERE子句类似,HAVING子句也是逻辑表达式,代表要筛选的条件。它基本的语法如下:

SELECT column1, column2, ... 

FROM table_name

WHERE condition

GROUP BY column1, column2, ...

HAVING condition

ORDER BY column_name;

其中,HAVING子句包含分组函数(如SUM、COUNT、AVG、MAX、MIN等)和逻辑运算符(如AND、OR、NOT等),用于对分组后的结果进行逻辑筛选。与WHERE子句不同的是,HAVING子句作用于分组后的结果。

5. HAVING示例

以下是使用HAVING子句筛选结果的示例:

5.1 过滤City的平均工资大于5500的结果

SELECT City, AVG(Salary) 

FROM Employee

GROUP BY City

HAVING AVG(Salary)>5500;

查询结果如下:

City AVG(Salary)
Beijing 6000
Shanghai 5750

以上SQL语句使用AVG函数计算每个City的平均工资,然后对结果进行分组,并筛选出平均工资大于5500的结果。

5.2 过滤City的总工资大于10000的结果

SELECT City, SUM(Salary) 

FROM Employee

GROUP BY City

HAVING SUM(Salary)>10000;

查询结果如下:

City SUM(Salary)
Beijing 12000

以上SQL语句使用SUM函数计算每个City的工资总和,然后对结果进行分组,并筛选出总工资大于10000的结果。

6. 结论

通过分组数据和HAVING筛选,我们可以获得更加细化的结果,以满足不同的分析需求。然而,需要注意的是,在分组数据过程中,我们需要仔细选择分组列和聚合函数,避免产生意外的结果。

数据库标签