可用版本:Dev (3.21) | 最新版本 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

PARTITION BY

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

就像 GROUP BY 子句 一样,PARTITION BY 子句将数据集划分为互斥的组/分区。

通过示例可以最好地说明这一点,在该示例中,我们获取所有书籍以及每本书作者的书籍总数

SELECT
  BOOK.ID,
  BOOK.AUTHOR_ID,
  count(*) OVER (PARTITION BY BOOK.AUTHOR_ID)
FROM
  BOOK
create.select(
         BOOK.ID,
         BOOK.AUTHOR_ID,
         count().over(partitionBy(BOOK.AUTHOR_ID)))
      .from(BOOK)
      .fetch();

产生

+----+-----------+-------+
| id | author_id | count |
+----+-----------+-------+
|  1 |         1 |     2 |
|  2 |         1 |     2 |
|  3 |         2 |     2 |
|  4 |         2 |     2 |
+----+-----------+-------+

就像普通聚合函数聚合 GROUP BY 子句 生成的每个 GROUP 的所有数据一样,PARTITION BY 子句允许对数据进行分组,但不会转换整个结果集。 因此,这种分组方式可能更方便,尤其是在报告中,因为原始数据集不会被修改,只会添加一个新列。

如果省略 PARTITION BY 子句,则整个数据集将形成单个分区。

方言支持

此示例使用 jOOQ

count().over(partitionBy(BOOK.AUTHOR_ID))

翻译成以下特定方言的表达式

Aurora Postgres, BigQuery, ClickHouse, CockroachDB, DB2, Databricks, DuckDB, Exasol, Firebird, H2, Hana, Informix, MariaDB, MemSQL, MySQL, Oracle, Postgres, Redshift, SQLDataWarehouse, SQLServer, SQLite, Snowflake, Sybase, Teradata, Trino, Vertica, YugabyteDB

count(*) OVER (PARTITION BY BOOK.AUTHOR_ID)

ASE、Access、Aurora MySQL、Derby、HSQLDB

/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

您对此页面有任何反馈吗? 我们很乐意倾听!

The jOOQ Logo