DeepSeek总结的PostgreSQL 19 即将引入的新功能GROUP BY ALL

原文地址

PostgreSQL 19 即将引入的新功能:GROUP BY ALL。以下是内容总结:


一、功能背景

  • 提交时间:2025年9月29日,由 Tom Lane 提交。
  • 功能说明GROUP BY ALL 是一种简化写法,自动将所有未包含聚合函数或窗口函数 的查询列添加到 GROUP BY 子句中。
  • 标准化:该语法已被 SQL 标准委员会接受,并已在其他数据库系统中存在。

二、使用示例

1. 基本用法:
sql 复制代码
-- 使用 GROUP BY ALL
SELECT relnamespace, relkind, COUNT(*) 
FROM pg_class 
GROUP BY ALL;

-- 等同于传统写法
SELECT relnamespace, relkind, COUNT(*) 
FROM pg_class 
GROUP BY relnamespace, relkind;

输出示例

复制代码
 relnamespace │ relkind │ count
──────────────┼─────────┼───────
           99 │ t       │    48
        13331 │ v       │    65
          ... │ ...     │   ...
2. 复杂查询示例(含连接和聚合):
sql 复制代码
SELECT
    n.nspname,
    c.relkind,
    COUNT(*) FILTER (WHERE c.relname ~ 'a'),
    ARRAY_AGG(DISTINCT relowner::regrole::text)
FROM
    pg_class c
    JOIN pg_namespace n ON c.relnamespace = n.oid
GROUP BY ALL
ORDER BY n.nspname, c.relkind;

输出示例

复制代码
      nspname       | relkind | count |   array_agg
--------------------+---------+-------+----------------
 information_schema | r       |     3 | {pgdba}
 pg_catalog         | i       |    98 | {pgdba}
 ...                | ...     |   ... | ...

三、功能特点

  1. 自动推断分组列 :自动将 SELECT 中所有非聚合、非窗口函数的列添加到 GROUP BY 列表。
  2. 排除聚合与窗口函数 :如 COUNT()ARRAY_AGG() 等不会被加入分组条件。
  3. 兼容复杂表达式:支持连接查询、条件过滤等复杂场景。
  4. 简化语法:减少重复编写列名,适用于快速数据探索。

四、总结

GROUP BY ALL 是 PostgreSQL 19 中一个实用的语法扩展,尤其适合快速数据探查和简化查询编写。虽然传统显式写法更明确,但新语法在保持逻辑清晰的同时减少了代码冗余,体现了 PostgreSQL 对现代 SQL 标准的持续跟进。

如果需要进一步了解该功能的具体限制或与其他数据库的兼容性,可参考原文中的讨论链接。

相关推荐
用户427007458388 小时前
第二节:使用Mongoose连接数据库
数据库
煎蛋学姐8 小时前
SSM协同过滤的视频推荐系统s04mp(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·用户管理·协同过滤·ssm 框架·视频推荐系统
马克学长8 小时前
SSM薪酬管理系统b26z4(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·薪酬管理系统
23zhgjx-zgx8 小时前
SQL注入攻击分析报告
网络·sql·ctf
胡萝卜的兔9 小时前
ThinkPHP6.0 Redis 延迟队列 + 定时任务 实现超时取消订单完整部署脚本
数据库·redis·缓存
2501_944521009 小时前
rn_for_openharmony商城项目app实战-主题设置实现
javascript·数据库·react native·react.js·ecmascript
heartbeat..9 小时前
SQL 常用函数大全:聚合、字符串、数值、日期、窗口函数解析
java·数据库·sql·函数
chuxinweihui9 小时前
MySQL数据库基础
数据库·mysql
无敌的牛10 小时前
MySQL基础
数据库·mysql
进阶的小名10 小时前
[超轻量级延时队列(MQ)] Redis 不只是缓存:我用 Redis Stream 实现了一个延时MQ(自定义注解方式)
java·数据库·spring boot·redis·缓存·消息队列·个人开发