`

SQL中group by怎么用?执行原理是什么?

阅读更多
group by
分组
通用数据库具有基于表的特定列对数据进行分析的能力。
可按照在 GROUP BY 子句中定义的组对行进行分组。以其最简单的形式,组由称为分组列的列组成。 SELECT 子句中的列名必须为分组列或列函数。列函数对于 GROUP BY 子句定义的每个组各返回一个结果。下列示例产生一个列出每个部门编号的最高薪水的结果:
SELECT DEPT, MAX(SALARY) AS MAXIMUM
FROM STAFF
GROUP BY DEPT
此语句产生下列结果:
DEPT MAXIMUM
------ ---------
10 22959.20
15 20659.80
20 18357.50
38 18006.00
42 18352.80
51 21150.00
66 21000.00
84 19818.00
注意:计算的是每个部门(由 GROUP BY 子句定义的组)而不是整个公司的 MAX(SALARY)。
将 WHERE 子句与 GROUP BY 子句一起使用
分组查询可以在形成组和计算列函数之前具有消除非限定行的标准 WHERE 子句。必须在GROUP BY 子句之前指定 WHERE 子句。例如:
SELECT WORKDEPT, EDLEVEL, MAX(SALARY) AS MAXIMUM
FROM EMPLOYEE
WHERE HIREDATE > '1979-01-01'
GROUP BY WORKDEPT, EDLEVEL
ORDER BY WORKDEPT, EDLEVEL

结果为:
WORKDEPT EDLEVEL MAXIMUM
-------- ------- -----------
D11 17 18270.00
D21 15 27380.00
D21 16 36170.00
D21 17 28760.00
E11 12 15340.00
E21 14 26150.00
注意:在 SELECT 语句中指定的每个列名也在 GROUP BY 子句中提到。未在这两个地方提到的列名将产生错误。GROUP BY 子句对 WORKDEPT 和 EDLEVEL 的每个唯一组合各返回一行。
在 GROUP BY 子句之后使用 HAVING 子句
可应用限定条件进行分组,以便系统仅对满足条件的组返回结果。为此,在GROUP BY 子句后面包含一个 HAVING 子句。 HAVING 子句可包含一个或多个用 AND 和 OR 连接的谓词。每个谓词将组特性(如 AVG(SALARY))与下列之一进行比较:
该组的另一个特性
例如:
HAVING AVG(SALARY) > 2 * MIN(SALARY)
常数
例如:
HAVING AVG(SALARY) > 20000
例如,下列查询寻找雇员数超过 4 的部门的最高和最低薪水:
SELECT WORKDEPT, MAX(SALARY) AS MAXIMUM, MIN(SALARY) AS MINIMUM
FROM EMPLOYEE
GROUP BY WORKDEPT
HAVING COUNT(*) > 4
ORDER BY WORKDEPT
此语句产生下列结果:
WORKDEPT MAXIMUM MINIMUM
-------- ----------- -----------
D11 32250.00 18270.00
D21 36170.00 17250.00
E11 29750.00 15340.00
有可能(虽然很少见)查询有 HAVING 子句但没有 GROUP BY 子句。在此情况下,DB2 将整个表看作一个组。因为该表被看作是单个组,所以最多可以有一个结果行。如果 HAVING 条件对整个表为真,则返回选择的结果(该结果必须整个由列函数组成);否则不返回任何行。来自:http://zhidao.baidu.com/question/11763032.html
分享到:
评论
1 楼 百威 2009-04-03  
使用 GROUP BY 子句时,一定要记住下面的规则:

1.   不能 GROUP BY text、image 或 bit 数据类型的列
2.   SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于聚合函数。
3.   不能 GROUP BY 列的别名。 这是说 GROUP BY 字段列表中的所有字段必须是实际存在于 FROM 子句中指定的表中的列。
4.   进行分组前可以使用 WHERE 子句消除不满足条件的行。
5.   使用 GROUP BY 子句返回的组没有特定的顺序。可以使用 ORDER BY 子句指定想要的排序次序。

相关推荐

    简单讲解sql语句中的group by的使用方法

    SQL中的`GROUP BY`语句是数据库查询中的一个重要部分,它用于将数据按照一个或多个列的值进行分组,以便对每个组执行聚合函数,如`SUM`、`COUNT`、`AVG`和`MAX`等。下面我们将详细讨论`GROUP BY`的使用方法及其相关...

    SQL语句的执行原理及顺序

    SQL 语句的执行原理及顺序是数据库管理系统中非常重要的知识点。了解 SQL 语句的执行顺序可以帮助开发人员更好地优化查询语句,提高数据库性能。 SQL 语句的执行顺序可以分为 11 个步骤: 1. FROM 子句:首先对 ...

    当数据库复杂查询执行顺序与编写顺序原理及sql案例:同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序

    当同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序时的用法

    SQL查询原理及执行顺序

    ### SQL查询原理及执行顺序详解 SQL(Structured Query Language)是一种用于管理关系型数据库的标准语言,其查询原理和执行顺序对于数据库性能优化至关重要。本文将深入探讨SQL查询的执行过程,帮助读者理解如何...

    Hive优化以及执行原理

    5. **减少shuffle操作**:通过使用笛卡尔积、并行度调整、减少distinct和group by等操作,避免不必要的shuffle阶段。 6. **使用索引**:虽然Hive的索引功能有限,但在某些场景下,例如优化join条件,使用bucketing...

    group by的详解

    在Oracle数据库中,`GROUP BY`语句是用于将数据行根据一个或多个列的值进行分组,以便对每个组执行聚合函数(如`SUM`、`COUNT`、`AVG`等)。`GROUP BY`的主要作用在于将具有相同列值的数据归类到一起,从而可以对每...

    清晰解读GroupBy

    在数据库查询语言SQL中,`GROUP BY`是一个非常重要的概念,它可以帮助我们对数据进行分组并执行聚合操作,从而得出更有价值的信息。本文将从`GROUP BY`的基础概念出发,通过一系列示例和深入分析,帮助读者更清晰地...

    sql,编译原理课件

    此外,WHERE子句用于过滤数据,GROUP BY和HAVING子句用于数据分组和筛选。 再者,SQL提供了数据的插入、更新和删除功能。INSERT语句用于向表中添加新记录,UPDATE语句用于修改已存在的记录,DELETE语句用于删除满足...

    深入浅析SQL中的group by 和 having 用法

    在SQL查询中,`GROUP BY`和`HAVING`是两个非常重要的子句,它们用于数据的分组和过滤,特别是在处理聚合数据时。本文将深入解析这两个概念及其使用方法。 首先,`GROUP BY`子句是用于将数据集按照指定的列或表达式...

    85提纲挈领的告诉你,SQL语句的执行计划和性能优化有什么关系?.pdf

    SQL语句的执行计划对于数据库性能优化至关重要,因为它能够让我们明白一条SQL语句在数据库中是如何执行的,以及数据库是如何利用索引来提高查询效率的。执行计划显示了数据库执行SQL语句时的逻辑步骤,包括查询的...

    SQL数据库原理语法技术详解

    可以通过WHERE子句指定查询条件,使用GROUP BY进行分组,HAVING过滤分组后的结果,以及ORDER BY进行排序。 2. **INSERT语句**:用于向数据库中插入新记录。可以一次性插入多行数据,也可以插入计算或函数的结果。 ...

    HiveSQL解析原理.docx

    在深入理解Hive如何将SQL语句转换为MapReduce任务之前,我们需要首先了解MapReduce是如何实现基本的SQL操作,比如Join、Group By以及Distinct等。 ##### 1. Join的实现原理 在Hive中,实现两个表的Join操作通常...

    76当我们在SQL里进行分组的时候,如何才能使用索引?.pdf

    尤其是在使用SQL语句进行数据分组(GROUP BY)时,索引的使用变得尤其重要。本文将深入探讨在使用GROUP BY语句时如何有效利用索引,以及与之相关的一些其他数据库性能优化概念。 首先,GROUP BY语句在数据库中用于...

    sql执行规则

    本文将详细介绍SQL执行规则中的关键步骤,包括`LEFT JOIN`, `WHERE`, `FROM`, `GROUP BY`等操作的具体执行流程。 #### 1. FROM子句 - **定义**: `FROM`子句用于指定要查询的数据源,即需要从中检索数据的表或视图。...

    Hive SQL 编译过程详解

    - **Group By的实现原理**:在Map阶段,Hive会将Group By字段组合成key,发送到相应的Reduce任务。Reduce阶段利用排序功能,保存最后一个键值,以处理每个分组的数据。 - **Distinct的实现原理**:对于单个...

    SQL_Server执行计划

    3. **聚合操作**:对于包含`GROUP BY`子句的查询,执行计划会展示聚合操作是如何进行的。 4. **系统负载与成本估算**:执行计划还提供有关查询预期负载及成本的信息,这对于评估查询对系统的整体影响至关重要。 ###...

    sql_plus的使用

    此外,SQL Plus还支持使用WHERE子句进行条件筛选,GROUP BY和HAVING子句进行数据分组,以及JOIN操作连接多个表。例如: ```sql SELECT column1, column2 FROM table1 JOIN table2 ON table1.common_column = table2...

    西南交通大学数据库原理作业-第4章 SQL查询语言.docx

    【SQL查询语言基础】 SQL(Structured Query Language)是用于管理和操作关系数据库的标准语言。...这些SQL语句展示了如何在实际数据库中操作和查询数据,同时也体现了SQL在数据库原理课程中的核心应用。

    【mysql知识点整理】— order by 、group by 出现Using filesort原因详解

    MySQL中的`ORDER BY`和`GROUP BY`是SQL查询中两个关键的子句,它们用于对查询结果进行排序和分组。然而,在某些情况下,MySQL可能会使用`Using filesort`来完成这些操作,这通常会导致性能下降。本文将深入探讨`...

    Server2005高效分页存储过程(支持多字段排序,支持Group By)

    SET @sql = @sql + ' GROUP BY ' + @GroupBy; SET @sql = @sql + ') AS t'; END -- 执行计算总记录数的SQL语句 EXEC sp_executesql @sql, N'@RecordCount int OUTPUT', @RecordCount OUTPUT; -- 计算总页数 ...

Global site tag (gtag.js) - Google Analytics