postgresql中关联多表递归查询,并分组计数、求和

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: postgresql中关联多表递归查询,并分组计数、求和

数据表


create table greenSpace
(
    gid  serial,
    type varchar(254), -- 类型,关联类型表code字段
    area numeric -- 面积
);

类型表(父子级关系),最父级的父级编码是-1


create table greenType
(
    code               varchar(10) not null -- 类型编码
        constraint greenType
            primary key,
    name               varchar(20), -- 类型名称
    parentcode         varchar(10) -- 父级编码
);

递归查询语法结构:


with recursive 名字 as (

   A.初始条件语句(非递归部分)

 

   union [all]

 

   B.递归部分语句

) [SELECT | INSERT | UPDATE | DELETE]

说明: 前半部分A为初始条件语句,后半部分B为要进行的递归语句



先执行A语句,然后将A语句的结果作为B语句的条件,如果需要对查询结果去重则使用union进行连接,否则使用union all进行连接


需求一:把数据表中数据按type分类,并归类到顶级的父类,统计每个大类的个数

WITH RECURSIVE r AS (
    SELECT d.*, ld.gid
    FROM greenType d
             left join greenSpace ld
                        on d.code = ld.type
    union ALL
    SELECT d.*, r.gid
    FROM greenType d,
         r
    WHERE d.code = r.parentcode
)
SELECT r.name, count(r.gid)
FROM r
where parentcode = '-1'
group by r.name


需求二:把数据表中数据按type分类,并归类到顶级的父类,统计每个大类中所有面积字段和

WITH RECURSIVE r AS (
    SELECT d.*, ld.area
    FROM greenType d
             left join greenSpace ld
                        on d.code = ld.type
    union ALL
    SELECT d.*, r.area
    FROM greenType d,
         r
    WHERE d.code = r.parentcode
)
SELECT r.name, coalesce(sum(r.area),0)
FROM r
where parentcode = '-1'
group by r.name

更多用法待研究……


如有问题,欢迎指出讨论


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
314 1
|
4月前
|
缓存 关系型数据库 数据库
PostgreSQL 查询性能
【8月更文挑战第5天】PostgreSQL 查询性能
86 8
|
6月前
|
SQL 关系型数据库 数据库
Python执行PostgreSQL数据库查询语句,并打印查询结果
本文介绍了如何使用Python连接和查询PostgreSQL数据库。首先,确保安装了`psycopg2`库,然后创建数据库连接函数。接着,展示如何编写SQL查询并执行,例如从`employees`表中选取所有记录。此外,还讨论了处理查询结果、格式化输出和异常处理的方法。最后,提到了参数化查询和事务处理以增强安全性及确保数据一致性。
Python执行PostgreSQL数据库查询语句,并打印查询结果
|
5月前
|
Java 关系型数据库 API
使用Spring Boot和PostgreSQL构建高级查询
使用Spring Boot和PostgreSQL构建高级查询
|
6月前
|
SQL 关系型数据库 数据库
Python查询PostgreSQL数据库
木头左教你如何用Python连接PostgreSQL数据库:安装`psycopg2`库,建立连接,执行SQL脚本如创建表、插入数据,同时掌握错误处理和事务管理。别忘了性能优化,利用索引、批量操作提升效率。下期更精彩!💡 csvfile
Python查询PostgreSQL数据库
|
7月前
|
SQL 人工智能 Oracle
PostgreSQL 递归查询(含层级和结构)
PostgreSQL 递归查询(含层级和结构)
|
7月前
|
SQL 关系型数据库 数据库
SQL 42501: Postgresql查询中的权限不足错误
SQL 42501: Postgresql查询中的权限不足错误
485 0
|
7月前
|
SQL 关系型数据库 分布式数据库
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能,而不是使用IF函数
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能,而不是使用IF函数
94 7
|
7月前
|
存储 关系型数据库 分布式数据库
PolarDB for PostgreSQL查询问题之条件查询失败如何解决
PolarDB for PostgreSQL是基于PostgreSQL开发的一款云原生关系型数据库服务,它提供了高性能、高可用性和弹性扩展的特性;本合集将围绕PolarDB(pg)的部署、管理和优化提供指导,以及常见问题的排查和解决办法。
|
SQL Cloud Native 关系型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
1301 1
下一篇
DataWorks