首页 > 数据库 > mysql教程 > 如何使用 GROUP BY 在 PostgreSQL 中对连续数值进行分组和聚合?

如何使用 GROUP BY 在 PostgreSQL 中对连续数值进行分组和聚合?

Susan Sarandon
发布: 2025-01-09 13:31:41
原创
567 人浏览过

PostgreSQL 中使用 GROUP BY 聚合连续数值的方法

How to Group and Aggregate Consecutive Numeric Values in PostgreSQL Using GROUP BY?

PostgreSQL 9.0 及更高版本可以使用 GROUP BY 子句聚合特定字段中的连续数值。以下查询演示了如何在包含公司、职业和年份字段的表中实现此目标:

步骤一:识别非连续值

<code class="language-sql">-- 步骤一:识别非连续值
SELECT
  company,
  profession,
  year,
  CASE
    WHEN ROW_NUMBER() OVER (PARTITION BY company, profession ORDER BY year) = 1
    OR year - LAG(year, 1, year) OVER (PARTITION BY company, profession ORDER BY year) > 1
    THEN 1
    ELSE 0
  END AS group_cnt
FROM qualification;</code>
登录后复制

此查询根据每行的年份是否连续分配一个分组计数 (group_cnt)。group_cnt 为 1 的行表示新组的开始。

步骤二:定义分组 ID

<code class="language-sql">-- 步骤二:定义分组 ID
SELECT
  company,
  profession,
  year,
  SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr
FROM qualification
WHERE group_cnt = 1;</code>
登录后复制

此查询为每个组分配组号 (group_nr)。每个连续年份都属于同一个组。

步骤三:聚合连续年份

<code class="language-sql">-- 步骤三:聚合连续年份
SELECT
  company,
  profession,
  ARRAY_AGG(year) AS years
FROM qualification
WHERE group_cnt <> 0
GROUP BY
  company,
  profession,
  group_nr
ORDER BY
  company,
  profession,
  group_nr;</code>
登录后复制

此最终查询将连续年份聚合到数组中,并过滤掉非连续行。结果按公司和职业分组。

通过以上三个步骤,即可在 PostgreSQL 中有效地聚合连续数值。 请注意,qualification 表应替换为您的实际表名。

以上是如何使用 GROUP BY 在 PostgreSQL 中对连续数值进行分组和聚合?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板