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
反馈
您对此页面有任何反馈吗? 我们很乐意倾听!