SQL GROUP BY子句
SQL GROUP BY子句
SQL的 GROUP BY 子句与SELECT语句一起使用,将相同的数据按组进行排列。该子句紧随SELECT语句的WHERE子句之后,并在ORDER BY和HAVING子句之前(如果存在)。
根据特定列对表格的记录进行分组的主要目的是对这些组进行计算。因此,GROUP BY子句通常与聚合函数一起使用,如SUM()、COUNT()、AVG()、MAX()或MIN()等。
例如,如果有一个名为SALES_DATA的表格,其中包含年份、产品和销售额等列的销售数据。为了计算一年的总销售额,可以使用GROUP BY子句来根据年份对该表格中的记录进行分组,并使用SUM()函数在每个组中计算销售额的总和。
语法
下面是SQL GROUP BY子句的基本语法:
其中, column_name(s) 是指我们想要按照其中一个或多个列的名称对数据进行分组,而 table_name 是指我们想要从中检索数据的表的名称。
带有聚合函数的GROUP BY子句
通常,我们会对表中的记录进行分组以进行计算。因此,SQL GROUP BY子句经常与聚合函数一起使用,例如SUM(),AVG(),MIN(),MAX(),COUNT()等。
示例
假设我们创建了一个名为CUSTOMERS的表,其中包含顾客的个人详细信息,包括他们的姓名,年龄,地址和薪水,使用以下查询:
现在使用INSERT语句将值插入到表中,如下:
创建的表格如下所示:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Hyderabad | 2000.00 |
2 | Khilan | 32 | Hyderabad | 1500.00 |
3 | Kaushik | 23 | Delhi | 2000.00 |
4 | Chaitali | 32 | Delhi | 6500.00 |
5 | Hardik | 23 | Bhopal | 8500.00 |
6 | Komal | 25 | Indore | 4500.00 |
7 | Muffy | 25 | Indore | 10000.00 |
以下的SQL查询根据年龄对CUSTOMERS表进行分组,并计算每个组中记录的数量−
输出
以下是生成的结果−
AGE | COUNT(Name) |
---|---|
32 | 3 |
23 | 2 |
25 | 2 |
示例
在下面的查询中,我们正在查找每个年龄的最高工资 –
输出
以下是上述查询的输出结果:
AGE | MAX_SALARY |
---|---|
32 | 6500.00 |
23 | 8500.00 |
25 | 10000.00 |
同样,我们可以根据AGE列将CUSTOMERS表的记录分组,并分别使用MIN()、AVG()和SUM()函数计算每个组中SALARY值的最大值、平均值和总和。
单列的GROUP BY子句
当我们使用GROUP BY子句与单个列一起使用时,表中具有相同值的所有行将合并为一条记录。
示例
在下面的示例中,我们通过ADDRESS列对上述创建的CUSTOMERS表进行分组,并计算每个城市客户的平均薪水。
输出
这将产生以下结果−
ADDRESS | AVG_SALARY |
---|---|
Hyderabad | 1750.000000 |
Delhi | 4250.000000 |
Bhopal | 8500.000000 |
Indore | 7250.000000 |
多列使用GROUP BY子句
当我们在GROUP BY子句中使用多个列时,所有在指定的所有列中具有相同值的表中的行将合并为一个单独的组。
示例
在下面的查询中,我们根据ADDRESS和AGE两列对CUSTOMERS表的记录进行分组。
输出
这将产生以下结果-
ADDRESS | AGE | TOTAL_SALARY |
---|---|---|
Hyderabad | 32 | 3500.00 |
Delhi | 23 | 2000.00 |
Delhi | 32 | 6500.00 |
Bhopal | 23 | 8500.00 |
Indore | 25 | 14500.00 |
GROUP BY和ORDER BY子句
我们可以在SQL中使用ORDER BY子句与GROUP BY一起,根据一个或多个列对分组数据进行排序。
语法
以下是在SQL中使用GROUP BY子句与ORDER BY子句的语法 –
示例
在这里,我们正在按年龄从高到低排序,并找到每个年龄的最高工资
输出
以下是产生的结果 –
AGE | MIN_SALARY |
---|---|
25 | 4500.00 |
23 | 2000.00 |
32 | 1500.00 |
GROUP BY和HAVING子句
我们也可以在表中使用GROUP BY子句和HAVING子句,根据特定条件筛选分组的数据。
语法
以下是在SQL中使用HAVING子句的GROUP BY子句的语法:
示例
在以下查询中,我们按年龄对客户进行分组,并计算每个组的最低工资。使用HAVING子句,我们过滤掉年龄大于24的组 –
输出
生成的结果如下:
ADDRESS | AGE | MIN_SUM |
---|---|---|
Hyderabad | 32 | 1500.00 |
Delhi | 32 | 6500.00 |
Indore | 25 | 4500.00 |