强啊!Oracle Database 23aiOracle Database 23ai:使用列别名进行分组排序!

大家好,这里是架构资源栈 !点击上方关注,添加"星标",一起学习大厂前沿架构!

从 Oracle Database 23ai 开始,您可以在 GROUP BY 和 HAVING 子句中直接使用列别名。此功能在早期版本的 Oracle Database 中不可用。

Oracle 21c 中的示例:

在 Oracle 21c 中,尝试在 GROUP BY 或 HAVING 子句中使用列别名将导致错误:

复制代码
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
SQL> SELECT LOWER(owner) AS Malek, SUM(bytes / 1024 / 1024) AS SIZE_MB
  2    FROM dba_segments
  3   GROUP BY Malek
  4  HAVING SIZE_MB > 100;
ERROR at line 4:
ORA-00904: "SIZE_MB": invalid identifier

Enter fullscreen mode Exit fullscreen mode

为了避免 Oracle 21c 中的无效标识符错误,您必须重写查询,而不使用 GROUP BY 和 HAVING 子句中的别名:

复制代码
SELECT LOWER(owner) AS Malek, SUM(bytes / 1024 / 1024) AS SIZE_MB
  FROM dba_segments
 GROUP BY owner
HAVING SUM(bytes / 1024 / 1024) > 100;

Enter fullscreen mode Exit fullscreen mode

Oracle 23ai 中的示例:

在 Oracle 23ai 中,上述两个查询均有效,现在可以在 HAVING 子句中直接使用别名 SIZE_MB:

复制代码
Connected to Oracle Database 23ai Free, Release 23.0.0.0.0 
SQL> SELECT LOWER(owner) AS Malek, SUM(bytes / 1024 / 1024) AS SIZE_MB
  2         FROM dba_segments
  3        GROUP BY Malek
  4       HAVING SIZE_MB > 100;

MALEK      SIZE_MB
------ ----------
sys         672

Enter fullscreen mode Exit fullscreen mode

Oracle 23ai 中的其他增强功能:

Oracle 23ai 还引入了在 GROUP BY 子句中使用列位置的功能。要启用此功能,需要将 group_by_position_enabled 参数设置为 TRUE。具体工作原理如下:

复制代码
SQL> SELECT LOWER(owner) AS Malek, SUM(bytes / 1024 / 1024) AS SIZE_MB
  FROM dba_segments
 GROUP BY 1
HAVING SIZE_MB > 100;

ERROR at line 1:
ORA-00979: "OWNER": must appear in the GROUP BY clause or be used in an aggregate function

Enter fullscreen mode Exit fullscreen mode

启用 group_by_position_enabled 参数后:

复制代码
SQL> ALTER SESSION SET group_by_position_enabled = TRUE;
Session altered.

SQL> SELECT LOWER(owner) AS Malek, SUM(bytes / 1024 / 1024) AS SIZE_MB
  FROM dba_segments
 GROUP BY 1
HAVING SIZE_MB > 100;

MALEK      SIZE_MB
------ ----------
sys         672

Enter fullscreen mode Exit fullscreen mode

结论:

Oracle Database 23ai 对 SQL 语法进行了重大改进,包括在 GROUP BY 和 HAVING 子句中使用列别名的功能,以及在 GROUP BY 中使用列位置的功能。这些增强功能简化了查询编写并提高了可读性。

如果这篇文章对你有帮助的话,别忘了【在看】【点赞】支持下哦~

原文地址:https://mp.weixin.qq.com/s/aZ0_Df47isqVRAyAG_dzrg

相关推荐
lilian2331 分钟前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
皮卡丘不断更16 分钟前
手机优先的 Personal Ledger:把账目、学习和复盘放到同一个入口
数据库·sqlite·fastapi·开源项目·个人效率
保卫大狮兄1 小时前
设备管理从台账到报废,完整生命周期一次讲清
数据库·设备管理·设备
数据安全技术观察2 小时前
数据动态脱敏:让脱敏策略跟着数据目录走
大数据·网络·数据库
小席是个热心肠2 小时前
Redis的自我学习
数据库·redis·学习
2601_965798473 小时前
Salient Theme Setup Guide for Fast Creative WordPress Sites
数据库·web3·php·wordpress
@Mike@3 小时前
09-数据库学习笔记(数据库索引与过滤器)
数据库·笔记
程序员夏洛4 小时前
MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
数据库·mysql
Wang's Blog5 小时前
PostgreSQL笔记34:索引优化策略全景解析——从B-tree到HOT的核心原理与实践
数据库·笔记·postgresql
l1258655 小时前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain