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
分享到:
相关推荐
SQL中的`GROUP BY`语句是数据库查询中的一个重要部分,它用于将数据按照一个或多个列的值进行分组,以便对每个组执行聚合函数,如`SUM`、`COUNT`、`AVG`和`MAX`等。下面我们将详细讨论`GROUP BY`的使用方法及其相关...
SQL 语句的执行原理及顺序是数据库管理系统中非常重要的知识点。了解 SQL 语句的执行顺序可以帮助开发人员更好地优化查询语句,提高数据库性能。 SQL 语句的执行顺序可以分为 11 个步骤: 1. FROM 子句:首先对 ...
当同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序时的用法
### SQL查询原理及执行顺序详解 SQL(Structured Query Language)是一种用于管理关系型数据库的标准语言,其查询原理和执行顺序对于数据库性能优化至关重要。本文将深入探讨SQL查询的执行过程,帮助读者理解如何...
5. **减少shuffle操作**:通过使用笛卡尔积、并行度调整、减少distinct和group by等操作,避免不必要的shuffle阶段。 6. **使用索引**:虽然Hive的索引功能有限,但在某些场景下,例如优化join条件,使用bucketing...
在Oracle数据库中,`GROUP BY`语句是用于将数据行根据一个或多个列的值进行分组,以便对每个组执行聚合函数(如`SUM`、`COUNT`、`AVG`等)。`GROUP BY`的主要作用在于将具有相同列值的数据归类到一起,从而可以对每...
在数据库查询语言SQL中,`GROUP BY`是一个非常重要的概念,它可以帮助我们对数据进行分组并执行聚合操作,从而得出更有价值的信息。本文将从`GROUP BY`的基础概念出发,通过一系列示例和深入分析,帮助读者更清晰地...
此外,WHERE子句用于过滤数据,GROUP BY和HAVING子句用于数据分组和筛选。 再者,SQL提供了数据的插入、更新和删除功能。INSERT语句用于向表中添加新记录,UPDATE语句用于修改已存在的记录,DELETE语句用于删除满足...
在SQL查询中,`GROUP BY`和`HAVING`是两个非常重要的子句,它们用于数据的分组和过滤,特别是在处理聚合数据时。本文将深入解析这两个概念及其使用方法。 首先,`GROUP BY`子句是用于将数据集按照指定的列或表达式...
SQL语句的执行计划对于数据库性能优化至关重要,因为它能够让我们明白一条SQL语句在数据库中是如何执行的,以及数据库是如何利用索引来提高查询效率的。执行计划显示了数据库执行SQL语句时的逻辑步骤,包括查询的...
可以通过WHERE子句指定查询条件,使用GROUP BY进行分组,HAVING过滤分组后的结果,以及ORDER BY进行排序。 2. **INSERT语句**:用于向数据库中插入新记录。可以一次性插入多行数据,也可以插入计算或函数的结果。 ...
在深入理解Hive如何将SQL语句转换为MapReduce任务之前,我们需要首先了解MapReduce是如何实现基本的SQL操作,比如Join、Group By以及Distinct等。 ##### 1. Join的实现原理 在Hive中,实现两个表的Join操作通常...
尤其是在使用SQL语句进行数据分组(GROUP BY)时,索引的使用变得尤其重要。本文将深入探讨在使用GROUP BY语句时如何有效利用索引,以及与之相关的一些其他数据库性能优化概念。 首先,GROUP BY语句在数据库中用于...
本文将详细介绍SQL执行规则中的关键步骤,包括`LEFT JOIN`, `WHERE`, `FROM`, `GROUP BY`等操作的具体执行流程。 #### 1. FROM子句 - **定义**: `FROM`子句用于指定要查询的数据源,即需要从中检索数据的表或视图。...
- **Group By的实现原理**:在Map阶段,Hive会将Group By字段组合成key,发送到相应的Reduce任务。Reduce阶段利用排序功能,保存最后一个键值,以处理每个分组的数据。 - **Distinct的实现原理**:对于单个...
3. **聚合操作**:对于包含`GROUP BY`子句的查询,执行计划会展示聚合操作是如何进行的。 4. **系统负载与成本估算**:执行计划还提供有关查询预期负载及成本的信息,这对于评估查询对系统的整体影响至关重要。 ###...
此外,SQL Plus还支持使用WHERE子句进行条件筛选,GROUP BY和HAVING子句进行数据分组,以及JOIN操作连接多个表。例如: ```sql SELECT column1, column2 FROM table1 JOIN table2 ON table1.common_column = table2...
【SQL查询语言基础】 SQL(Structured Query Language)是用于管理和操作关系数据库的标准语言。...这些SQL语句展示了如何在实际数据库中操作和查询数据,同时也体现了SQL在数据库原理课程中的核心应用。
MySQL中的`ORDER BY`和`GROUP BY`是SQL查询中两个关键的子句,它们用于对查询结果进行排序和分组。然而,在某些情况下,MySQL可能会使用`Using filesort`来完成这些操作,这通常会导致性能下降。本文将深入探讨`...
SET @sql = @sql + ' GROUP BY ' + @GroupBy; SET @sql = @sql + ') AS t'; END -- 执行计算总记录数的SQL语句 EXEC sp_executesql @sql, N'@RecordCount int OUTPUT', @RecordCount OUTPUT; -- 计算总页数 ...