Skip to Content
《SQL 烹饪书》第二版
book

《SQL 烹饪书》第二版

by Anthony Molinaro, Robert de Graaf
May 2025
Intermediate to advanced
570 pages
7h 38m
Chinese
O'Reilly Media, Inc.
Content preview from 《SQL 烹饪书》第二版

附录 A. 窗口功能复习

本书中的菜谱充分利用了 2003 年添加到 ISO SQL 标准中的窗口函数,以及供应商特定的窗口函数。本附录旨在简要介绍窗口函数的工作原理。窗口函数使许多典型的困难任务(即使用标准 SQL 难以解决的问题)变得相当容易。有关可用窗口函数的完整列表、完整语法以及它们如何工作的深入介绍,请查阅供应商的文档。

分组

在继续学习 Windows 函数之前,了解 SQL 中分组的工作原理至关重要--SQL 中分组结果的概念可能很难掌握。问题源于没有完全理解 GROUP BY 子句的工作原理,以及为什么使用 GROUP BY 时某些查询会返回特定结果。

简单地说,分组是一种将同类行组织在一起的方法。在查询中使用 GROUP BY 时,结果集中的每一条记录都是一个组,代表在您指定的一列或多列中具有相同值的一条或多条记录。这就是它的要点。

如果一个组仅仅是一条记录的唯一实例,代表某一列(或多列)具有相同值的一条或多条记录,那么表 EMP 中组的实际示例包括部门 10 的所有员工(这些员工的共同值是 DEPTNO=10)或所有文员(这些员工的共同值是JOB=CLERK)。请看下面的查询。第一个查询显示部门 10 中的所有员工;第二个查询将部门 10 中的员工分组,并返回该组的以下信息:组中的行数(成员)、最高工资和最低工资:

select deptno,ename
  from emp
 where deptno=10

DEPTNO ENAME
------ ----------
    10 CLARK
    10 KING
    10 MILLER


select deptno,
       count(*) as cnt,
       max(sal) as hi_sal,
       min(sal) as lo_sal
  from emp
 where deptno=10
 group by deptno

DEPTNO        CNT     HI_SAL     LO_SAL
------ ---------- ---------- ----------
    10          3       5000       1300

如果不能将部门 10 中的员工分组,要想获得第二个查询中的信息,就必须手动检查该部门的记录(如果只有三行,那就微不足道了,但如果有三百万行呢?)那么,为什么要分组呢?这样做的原因各不相同;也许你想看看有多少个不同的组,或者每个组中有多少成员(行)。从这个简单的例子中可以看出,分组可以让你获得表格中许多行的信息,而不必逐一检查。

SQL 组的定义

在数学中,组大多定义为(G,-,e),其中G是一个集合,- 是G 中的二进制运算,eG 的一个成员。我们将使用这一定义作为 SQL 组的基础。SQL 组将定义为(G,e),其中G是使用 GROUP BY 的单个或独立查询的结果集,eG 的成员,并且满足以下公理:

  • 对于G 中的每个ee都是独特的,代表e 的一个或多个实例。

  • 对于 G 中的每个e,集合函数 COUNT 都会返回一个 > 0 的值。

提示

在 SQL 组的定义中包含了结果集,以强化我们仅在处理查询时定义组这一事实。因此,将每个公理中的e替换为行是准确的,因为从技术上讲,结果集中的行就是组。

由于这些属性是我们认为组的基本属性,因此我们必须证明它们是真实的(我们将通过使用一些 SQL 查询示例来继续证明)。

组是非空组

根据定义,组必须至少有一个成员(或行)。如果我们将此视为真理,那么就可以说,一个组不可能从一张空表中创建出来。要证明这个命题为真,只需证明它为假即可。下面的示例创建了一个空表,然后尝试通过对该空表的三个不同查询来创建组: ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

SQL Essentials For Dummies

SQL Essentials For Dummies

Richard Blum, Allen G. Taylor
Oracle SQL By Example

Oracle SQL By Example

Alice Rischert

Publisher Resources

ISBN: 9798341658813