首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在PostgreSQL中对一组ID(不是单个ID)进行分层次的子计数

在PostgreSQL中,可以使用递归查询和窗口函数来对一组ID进行分层次的子计数。

递归查询是一种自引用查询,可以在查询中引用相同的表。在这种情况下,我们可以使用递归查询来计算每个ID的子计数。

首先,我们需要创建一个包含ID和其父ID的表。假设我们有一个名为"table_name"的表,包含"ID"和"parent_ID"两列。

然后,我们可以使用递归查询来计算每个ID的子计数。以下是一个示例查询:

代码语言:txt
复制
WITH RECURSIVE sub_counts AS (
  SELECT ID, 1 AS level, ARRAY[ID] AS path
  FROM table_name
  WHERE parent_ID IS NULL -- 根节点的条件,可以根据实际情况修改

  UNION ALL

  SELECT t.ID, s.level + 1, s.path || t.ID
  FROM table_name t
  JOIN sub_counts s ON t.parent_ID = s.ID
)
SELECT ID, level, path, (SELECT COUNT(*) FROM sub_counts WHERE path @> s.path) AS sub_count
FROM sub_counts s;

上述查询中,我们使用了递归查询的WITH RECURSIVE语法。首先,我们选择根节点(parent_ID为空的节点)作为起始点,并将其level设置为1,将其ID添加到path数组中。

然后,我们通过递归地连接子节点和父节点,计算每个节点的level和path。在每一级递归中,我们将子节点的ID添加到path数组中。

最后,我们使用窗口函数COUNT(*)来计算每个节点的子计数。通过使用子计数的路径(path)与当前节点的路径(s.path)进行比较,我们可以确定哪些节点是当前节点的子节点。

请注意,上述查询中的"table_name"应替换为实际的表名,"ID"和"parent_ID"应替换为实际的列名。

这是一个使用PostgreSQL进行分层次的子计数的示例。根据实际情况,您可以根据需要进行调整和修改。

腾讯云提供了PostgreSQL数据库服务,您可以使用腾讯云的云数据库PostgreSQL来存储和管理您的数据。您可以在腾讯云官网了解更多关于云数据库PostgreSQL的信息:云数据库 PostgreSQL

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

分布式 PostgreSQL 集群(Citus),分布式表分布列选择最佳实践

实时分析应用 需要大规模并行性、协调数百个内核以快速获得数值、统计或计数查询结果应用程序。通过跨多个节点 SQL 查询进行分片和并行化,Citus 可以在一秒钟内对数十亿条记录执行实时查询。...涉及多个聚合和 GROUP BY 相对简单(但计算量大)分析查询。 如果您情况类似于上述任何一种情况,那么下一步就是决定如何在 Citus 集群对数据进行分片。...多租户应用 多租户架构使用一种分层数据库建模形式在分布式集群节点之间分布查询。数据层次结构顶部称为 tenant id,需要存储在每个表。...这意味着,如果同一租户数据始终位于单个 PostgreSQL 节点上,那么我们原始查询可以由该节点通过 tenant_id 和 page_id 执行 join 来一次性回答。...共置意味着更好功能支持 Citus 通过共置解锁功能完整列表如下: 一组位于同一位置分片上查询完整 SQL 支持 多语句事务支持一组位于同一位置分片进行修改 通过 INSERT..SELECT

4.4K20

SqlAlchemy 2.0 中文文档(二)

### 带有 GROUP BY / HAVING 聚合函数 在 SQL ,聚合函数允许跨多行列表达式聚合在一起,以产生单个结果。示例包括计数、计算平均值,以及在一组定位最大值或最小值。...SQLAlchemy 使用ScalarSelect 构造来表示标量子查询,该构造是ColumnElement 表达式层次结构一部,与常规查询不同,常规查询由Subquery 构造表示,该构造位于...### 带有 GROUP BY / HAVING 聚合函数 在 SQL ,聚合函数允许将多行列表达式聚合在一起,以产生单个结果。示例包括计数、计算平均值,以及定位一组最大或最小值。...带有 GROUP BY / HAVING 聚合函数 在 SQL ,聚合函数允许跨多行列表达式聚合在一起以产生单个结果。例子包括计数、计算平均值,以及查找一组最大值或最小值。...SQLAlchemy 使用ScalarSelect结构来表示标量子查询,该结构是ColumnElement表达式层次结构一部,与常规查询不同,常规查询由Subquery结构表示,后者属于FromClause

31110
  • 理解PG如何执行一个查询-2

    Limit算子不会删除结果集中列,但是显然他会删除行,实际上并不是从表真正删除。 如果一个查询包含limit或offset或者2者,那么计划器/优化器会使用一个limit算子。...当您从涉及继承层次结构表中进行选择时,也会使用Append。 dvds表继承自video,tapes表也是。...(0,5) | 8 | Wink Wankel “ctid”是一个特殊列(类似于oid),自动称为每一行一部。元组ID由块号、块内元组号组成。...当按元组ID选择时,Tid Scan算子读取元组ID指向块并返回请求元组。 物化 Materialize算子用于某些选择操作。计划器/优化器可能觉得物化一个选择一次比重复选择工作代价要低。...以下是每组进行计数后样本外观: customer_id | customer_name | birth_date | balance | input set ------------

    1.8K20

    重磅 | 十年来扩展PostgreSQL一些经验和教训

    有关如何解决此问题详细信息,请跳至有关pg_repack讨论。 2 索引溢出 在尝试了解索引膨胀是如何产生之前,让我们首先回顾一下PostgreSQL索引是如何在很高层次上工作。...为此,您最多可以创建30个分区,每个分区都将保留一个特定日期范围。实施保留策略时,使用简单DROP TABLE方法从数据库删除单个分区表,而不是尝试从整个表中进行有针对性删除。...可以使用逻辑复制原因是,更改进行了解码和应用,就像将SQL语句流发送到副本一样(而不是简单地将页面更改写入磁盘)。 从高层次看,该过程看起来像: 使用升级PostgreSQL版本设置新服务器。...如果您打算自己操作PostgreSQL,则可以考虑阅读手册这一部。...目前,我们通过租户在256个分区我们数据subscribers和notifications数据进行分区。

    1.5K20

    Citus 分布式 PostgreSQL 集群 - SQL Reference(查询分布式表 SQL)

    在高层次上,Citus 将 SELECT 查询划分为更小查询片段,将这些查询片段分配给 worker,监督他们执行,合并他们结果(如果需要,它们进行排序),并将最终结果返回给用户。...如果不是,Citus 每个 worker 运行 select distinct 语句, 并将列表返回给 coordinator,从中获取最终计数。...为了提高性能,您可以选择进行近似计数。请按照以下步骤操作: 在所有 PostgreSQL 实例(coordinator 和所有 worker)上下载并安装 hll 扩展。...百位计算 在大量行上找到精确位数可能会非常昂贵, 因为所有行都必须转移到 coordinator 以进行最终排序和处理。...权衡是准确性与 worker 和 coordinator 之间共享数据量。有关如何在 tdigest 扩展中使用聚合完整说明,请查看官方 tdigest github 存储库文档。

    3.2K20

    PostgreSQL 教程

    PostgreSQL 基础教程 首先,您将学习如何使用基本数据查询技术从单个查询数据,包括查询数据、结果集进行排序和过滤行。然后,您将了解高级查询,例如连接多个表、使用集合操作以及构造查询。...ANY 通过将某个值与查询返回一组进行比较来检索数据。 ALL 通过将值与查询返回值列表进行比较来查询数据。 EXISTS 检查查询返回行是否存在。 第 8 节....导入和导出数据 您将学习如何使用COPY命令,以 CSV 文件格式 PostgreSQL 数据进行导入和导出。 主题 描述 将 CSV 文件导入表 向您展示如何将 CSV 文件导入表。...唯一约束 确保一列或一组值在整个表是唯一。 非空约束 确保列不是NULL。 第 14 节....hstore 向您介绍数据类型,它是存储在 PostgreSQL 单个一组键/值。 JSON 说明如何使用 JSON 数据类型,并向您展示如何使用一些最重要 JSON 运算符和函数。

    51410

    GreenPlum数据库对象

    initdb从无到有创建单个可用PostgreSQL数据库,也就是在一个空目录创建PostgreSQL运行所需要所有文件,包括全局数据字典、控制文件和三个数据库:template0、template1...一些对象(角色)会在一个Greenplum数据库系统所有数据库之间共享。其他对象(例如用户创建表)则只出现在创建它们数据库。警告: CREATE DATABASE命令不是事务性。...定义日期范围表分区 定义数字范围表分区 定义列表表分区 定义多级分区 一个现有的表进行分区 定义日期范围表分区 一个按日期范围分区表使用单个date或者timestamp列作为分区键列。...这可能会在系统表增加很多项,这些项增加了优化和执行查询所需时间和内存。增加范围区间或者选择一种不同分区策略可减少创建分区数量。 一个现有的表进行分区 表只能在创建时被分区。...选择性分区扫描排查 下列限制可能导致一个用户分区层次进行非选择性扫描查询计划。

    69020

    PostgreSQL架构】为什么关系型数据库是分布式数据库未来

    查询路由意味着获取查询(作为查询一部),并让存储相关分片RDBMS节点处理查询,而不是收集或重新整理中间结果,当查询通过分发列进行过滤和合并时,这是可能。...可以通过查询下推在单个回合并行化包含高级查询树所有分片中查询(例如查询之间联接),只要它们可以联接分布列上所有分布式表(而引用表可以在任何列上联接)。...这将启用非常高级分析查询,该查询仍具有线性可伸缩性。Citus可以利用PostgreSQL计划程序已经所有查询进行转换来识别可下推查询,并为所有剩余查询生成单独计划。...当您需要一组操作来进行事务处理而无需在应用程序服务器和数据库之间来回移动时,对数据库进行编程功能特别有用。...尽管大多数这些功能对于开发需要扩展复杂应用程序来说似乎都是必不可少,但并不是所有分布式数据库都支持它们。下面我们根据公开提供文档一些流行分布式数据库进行比较。 ?

    2.5K20

    SqlAlchemy 2.0 中文文档(三十三)

    ,其中一个中间类在两个关联在多多模式类之间进行关联。...## 继承映射配方 基本继承映射 单表、联接表和具体表继承工作示例,映射类继承层次结构中所述。 文件列表: joined.py - 联接表(每个子类一个表)继承示例。...如果返回所有分片 id,则将查询所有分片并将结果连接在一起。 在这些示例,使用不同类型分片相同基本示例进行操作,该示例根据每个大陆天气数据进行处理。...继承映射配方 基本继承映射 单表、联表和具体表继承工作示例,映射类继承层次结构中所述。 文件列表: joined.py - 联接表(每个子类一个表)继承示例。...query_chooser 展示了 SQL 表达式元素检查,以尝试确定请求单个分片。 构建通用分片例程是组织实例在多个数据库一种雄心勃勃方法。

    22410

    【数据库】03——初级开发需要掌握哪些SQL语句

    可以料想到,where子句十关键,否则结果会直接输出笛卡尔积,那可是相当大数据量 4 附加基本运算 4.1 更名运算 属性可以使用更名运算进行更名。...百号%:匹配任意字串 下划线_:匹配任意一个字符 模式是大小写敏感(Mysql除外,PostgreSQL使用ilike大小写也不敏感)。...对此问题一种简单应对措施是在查询select子句中属性进行更名。 另外举一个栗子,“找出所有系中所有教师工资总额最大系”。此时having子句无能为力了,但是from查询它还行。...8.7 标量子查询 SQL允许查询出现在返回单个表达式能够出现任何地方,只要该查询只返回一个包含单个属性元组,这样查询成为标量子查询。举个栗子,列出所有的系以及每个系教师总数。...8.8 不带from子句标量 假如我们想查找到平均每位教师所讲授课程段数(无论是学年还是学期),其中由多位教师讲授课程段每个教师进行一次计数,我们可以这么做。

    3.5K31

    PG几个有趣插件和工具介绍

    但它不是PostgreSQL优化设置灵丹妙药。许多设置不仅取决于硬件配置,还取决于数据库大小、客户端数量和查询复杂性。只有考虑到所有这些参数,才能对数据库进行最佳配置。...LTRIM 从字符串开头删除指定字符 NLSSORT 返回一个字节字符串,用于根据区域设置语言排序序列字符串进行排序 REGEXP_COUNT 在字符串搜索正则表达式,并返回匹配次数 REGEXP_INSTR...替换匹配POSIX正则表达式字符串 RPAD 用字符序列将字符串右填充到指定长度 RTRIM 从字符串末尾删除指定字符 SUBSTR 使用指定位置和长度字符提取字符串一部 SUBSTRB 使用字节来指定位置和长度提取字符串一部...返回一个或多个表达式列表最大值 LEAST 返回一个或多个表达式列表最小值 LNNVL 计算值是否为false或未知 NANVL 当值不是数字(NaN)时返回替代值 NVL 当值为NULL时返回替代值...通过系统视图或扩展视图(pg_stat_activity或pg_stat_statements)来辅助分析函数和存过性能问题也是有所局限。

    63430

    【日更计划116】数字IC基础题【UVM部分】

    这适用于该组件类型所有实例。 另一方面,实例覆盖意味着仅覆盖组件类特定实例。组件特定实例由该组件在UVM组件层次结构位置进行索引。...不,只有UVM_component类是UVM测试平台层次结构一部,从而可以使用实例覆盖。...sequence_item或sequence不是UVM测试平台层次结构一部,因此只能使用类型覆盖来覆盖,类型覆盖将覆盖该类型所有对象。 [310] uvm_obejction是什么?...当一个phase所有进程都放下objections时,该phaseobjections计数器清零。这种“all dropped”情况说明每个进程都同意结束该phase。...[312] uvmphase机制是什么意思? [313] uvm_component有哪些phase?UVMrun_phase有哪些phase?

    61610

    深度 | 如何玩转PG查询处理与执行器算法

    因为一个较短SQL可以完成千百行C或者Java工作,特别是在访问一些层次数据模型(例如:Oracle层次查询,一条语句可以把层次结构输出出来;PostgreSQLWITH-RECURSIVE...x; max(x.x2)在SQL语义上应该是在最外层查询中计算,而不是将x.x2传入到内层查询,在内层查询中计算Aggregate函数max()值。...在PostgreSQL,通常分成如下几步: 1)查询处理 在PostgreSQL内部有2类查询:一种在from语句后面称为SubQuery,另一种在作为表达式一部,可以出现在targetList...从整体来看,JOIN顺序选择是Condition-Driven,而不是完全所有的表进行排列组合求解。...以上就是在PostgreSQL内核一个查询处理整个生命周期,基本可以了解到一个SQL字符串在数据库内核是如何一步步被解析,直到到执行基本过程。

    2.2K30

    何在Ubuntu 14.04第2部上查询Prometheus

    我们现在知道如何基于单个数值或基于具有匹配标签一组时间序列值来过滤一组时间序列。 第2步 - 使用集合运算符 在本节,您将学习如何使用Prometheus集合运算符来相互关联时间序列集。...当重新启动单个服务实例时,存储区计数器会重置,并且您通常希望查看“现在”延迟(例如,在过去5钟内测量),而不是指标的整个时间。...如果您绘制原始时间戳图,它看起来会像这样: 您所见,原始时间戳值本身通常不是很有用。相反,您经常想知道时间戳值年龄。...第5步 - 排序和使用topk / bottomk函数 在此步骤,您将学习如何查询输出进行排序或仅选择一组系列最大值或最小值。 在表格控制台视图中,按输出系列输出系列进行排序通常很有用。...注意:如果没有关闭实例,则此查询将返回空结果,而不是计数为0单个输出系列。这是因为count()聚合运算符需要一组维度时间序列作为其输入,并且可以根据by或without子句输出序列进行分组。

    2.8K00

    Elasticsearch bucket_script、bucket_selector、bucket_sort 区别和应用场景?

    协议桶聚合饼图 时间走势聚合示意图 (2)Metrics 指标聚合 通俗举例:求一组数据最大值;求一组平均值。...聚合核心是前置聚合结果二次聚合,所以,只有业务需求有聚合结果再聚合场景才考虑聚合。 bucket_script 是一种特殊聚合功能,它允许我们在聚合执行脚本。...应用举例:可以使用脚本来计算每个桶平均值、百比(本文示例)、环比及标准差等。 bucket_selector 是一种特殊聚合功能,它允许我们选择某些桶并进行聚合。...应用举例:可以使用选择器选择某些桶并统计它们总和。 bucket_sort 是一种排序功能,它允许我们按指定顺序进行排序。 应用举例:可以按照每个桶计数进行排序,以便查看最频繁项目。...这样,我们可以对业务数据进行层次分析和统计功能。

    63310

    POSTGRESQL 事务控制(二) 事务开启 (写着费力,看着费劲系列)

    今天接着上回书,事务如果在处理没有事务,则实现和控制是十容易,但如果有事务情况下, 事务通过transactionState结构体来实现,(上次已经提到了),每一个transactionState...那么clog 承担了整体事务状态记录和查询任务....下面是这段和pg_subtrans有关代码, 这段代码在 xact.c , 这段代码主要作用是在给事务上父事务ID 进行记录, 好进行自下而上寻根 static void AssignTransactionId...主要原由是,事务是包含在事务内,在事务本身失效后,这些事务也没有必要进行记录,所以在pg_wal也不会有相关子事务日志记录....process ID + 本地计数器, 这样就可以产生一个自己临时虚拟事务ID 在获取了ID后,我们直接就开始进行相关事务开启,参加下面的语句 TRACE_POSTGRESQL_TRANSACTION_START

    75351

    聊聊图数据库和图数据库小知识

    该系统关键概念是图,它直接将存储数据项,与数据节点和节点间表示关系集合相关联。这些关系允许直接将存储区数据链接在一起,并且在许多情况下,可以通过一个操作进行检索。...图数据库从设计上,就是可以简单快速地检索难以在关系系统建模复杂层次结构。...这样就可以对数据元素进行分类,以便于集中检索。从图数据库检索数据需要 SQL 之外查询语言,SQL是为了处理关系系统数据而设计,因此无法“优雅地”处理遍历图。...,在层次切换时,为了保证图连通性,除了显示下一个层次顶点(PageRank 值在下一个区间)之外,还需要显示这 2 个层次抽样出来顶点边(这相当于一个图内部连通路径检索,如果能做 aggreate...布局问题:目前常见无非是力导引、圆形、树形、网格型,这些都是无任何业务语义布局,树形布局,哪些应该作为顶层节点,哪些是下一级节点,如果仅仅通过边有向性,单个 EdgeType 显示还好,多个 EdgeType

    3.1K11
    领券