目录
1、创建分组
2、过滤分组
3、分组和排序
4、select子句排序
首页 数据库 Oracle Oracle示例详解分组数据

Oracle示例详解分组数据

Jul 19, 2022 pm 02:07 PM
oracle

本篇文章给大家带来了关于Oracle的相关知识,其中主要整理了分组数据的相关问题,分组允许把数据划分进逻辑组中,以便可以对每个组执行聚合计算,下面一起来看一下,希望对大家有帮助。

Oracle示例详解分组数据

推荐教程:《Oracle视频教程

分组允许把数据划分进逻辑组中,以便可以对每个组执行聚合计算。

1、创建分组

分组是在SELECT语句中使用GROUP BY子句创建的。

示例:

SELECT vend_id, count(*) as num_prodsfrom productsgroup by vend_id;
登录后复制

在这里插入图片描述

由于使用了GROUP BY,将不必指定要评估和计算的每个分组,这是自动完成的。GROUP BY子句指示Oracle对数据进行分组,并对每一个分组(而不是对整个结果集)执行聚合。

在使用GROUP BY之前,下面列出了你需要知道的使用它的一些重要规则。

  • GROUP BY子句可以根据需要包含许多列。它允许嵌套分组,对数据的分组方式进行更细粒度的控制。
  • 如果在group by子句中具有嵌套的分组,就会在最后指定的分组上汇总数据。换句话说,在建立分组时,将会把指定的所有列放在一起评估(因此,将不会针对每个单独的列取回数据)。
  • group by中列出的每一列都必须是一个检索的列或者有效的表达式(而不是一个1聚合函数)。如果在select中使用一个表达式,那么必须在group by中指定相同的表达式。不能使用别名。
  • 除了聚合计算语句之外,SELECT语句中的每一列都应该出现在GROUP BY子句中。
  • 如果分组列包含一个具有NULL值的列,将返回NULL,作为一个分组。如果有多行具有NULL值,则将把他们都分组在一起。
  • GROUP BY子句必须出现在WHERE子句的后面和ORDER BY子句前面。

2、过滤分组

where子句通常也用于行过滤。但是,where在这里不适用,因为where可以可以过滤特定的行,而不是分组。事实上,where无法适用于分组。

Oracle为此提供了另一个子句:HAVING。where子句与having子句唯一的区别是:where过滤行,而having则过滤分组。

**提示:**having支持所有的where运算符

where与having的规则,语法完全相同,只有关键子不同。

示例:

SELECT cust_id, COUNT(*) AS ordersFROM ordersGROUP BY cust_idHAVING COUNT(*) >= 2;
登录后复制

在这里插入图片描述

注意:having与where之间的区别

换个角度来看待having与where的区别:where过滤发生在数据之前,而having过滤则发生在数据分组之后。这是一个重要的区别,被where子句删除的行不会包括在分组中。这可能会改变计算值,基于having子句中使用的那些值,它反过来又可能影响那些分组将会被过滤。

where子句与having子句同时使用示例:

select vend_id, count(*), as num_prodsfrom productswhere prod_price>=10group by vend_idhaving count(*) > 2;
登录后复制

在这里插入图片描述

SELECT vend_id, COUNT(*) AS num_prodsFROM productsGROUP BY vend_idHAVING COUNT(*) >= 2;
登录后复制

在这里插入图片描述

3、分组和排序

group by和order by的差别很大,即使他们通常用于完成相同的事情。

下表描述了order by与group by的区别

order by group by
对生成的输出进行排序 对行进行分组,不过输出可能没有采用采用分组顺序
可能使用任意列(甚至包括没有选择的列) 只可能使用所选的列或者表达式,并且一定会使用所有选择的列表达式
从来都不是必须的 如果结合使用列(或者表达式)与聚合函数,则必需的

时常,你会发现使用GROUP BY分组的数据的确是以分组顺序输出的。但是并非总是如此,并且实际上SQL规范也并没有如此要求。而且你实际上可能希望它以不同于分组的方式进行排序。你以一种方式对数据进行分组(以获得特定于分组的聚合值),并不意味着你也希望输出以相同的方式进行排序。总是应该还提供一个显式的ORDER BY子句,即使它与GROUP BY子句完全相同。

提示:不要忘记ORDER BY

通常,无论何时使用GROUP BY子句,还应该指定一个ORDER BY子句,这是确保正确地对数据进行排序的唯一方式。永远不要依靠GROUP BY对数据排序。

为了演示同时使用GROUP BY和ORDER BY的情况,让我们看一个示例。下面的SELECT语句类似于之前使用的SELECT语句。它用于检索总价在50以上(含50)的所有订单的订单号和订单总价:

SELECT order_num, SUM(quantity*item_price) AS ordertotalFROM orderitemsGROUP BY order_numHAVING SUM(quantity*item_price) >= 50;
登录后复制

在这里插入图片描述

要按订单总价对输出进行排序,只需添加一个ORDER BY子句,如下:

SELECT order_num, SUM(quantity*item_price) AS ordertotalFROM orderitemsGROUP BY order_numHAVING SUM(quantity*item_price) >= 50ORDER BY ordertotal;
登录后复制

在这里插入图片描述

4、select子句排序

select子句和它们的顺序

子句 描述 是否必须
select 要返回的列或表达式 Y
from 要从中检索数据的表 Y(在Oracle中是必须的;在大多数其他的DBMS中则不是)
where 行级过滤(分组前过滤) N
group by 分组规范 仅当按分组计算聚合值时是必须的
having 分组级过滤(分组后过滤) N
order by 输出的排列顺序 N

推荐教程:《Oracle视频教程

以上是Oracle示例详解分组数据的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

oracle中计算两个日期之间天数的函数 oracle中计算两个日期之间天数的函数 May 08, 2024 pm 07:45 PM

Oracle 中计算两个日期之间天数的函数是 DATEDIFF()。具体用法如下:指定时间间隔单位:interval(如 day、month、year)指定两个日期值:date1 和 date2DATEDIFF(interval, date1, date2) 返回天数差

oracle数据库日志会保存多久 oracle数据库日志会保存多久 May 10, 2024 am 03:27 AM

Oracle 数据库日志的保留期限取决于日志类型和配置,包括:重做日志:由 "LOG_ARCHIVE_DEST" 参数配置的最大大小决定。归档重做日志:由 "DB_RECOVERY_FILE_DEST_SIZE" 参数配置的最大大小决定。在线重做日志:不归档,在数据库重启时丢失,保留期限与实例运行时间一致。审计日志:由 "AUDIT_TRAIL" 参数配置,默认保留 30 天。

oracle数据库启动步骤顺序为 oracle数据库启动步骤顺序为 May 10, 2024 am 01:48 AM

Oracle 数据库启动顺序为:1. 检查前置条件;2. 启动监听器;3. 启动数据库实例;4. 等待数据库打开;5. 连接到数据库;6. 验证数据库状态;7. 启用服务(如果需要);8. 测试连接。

oracle中interval的用法 oracle中interval的用法 May 08, 2024 pm 07:54 PM

Oracle 中的 INTERVAL 数据类型用于表示时间间隔,语法为 INTERVAL <精度> <单位>,可使用加减乘除运算操作 INTERVAL,适用于存储时间数据、计算日期差值等场景。

oracle中如何判断包含两个字符串 oracle中如何判断包含两个字符串 May 08, 2024 pm 07:00 PM

在 Oracle 中,可使用嵌套 INSTR 函数判断一个字符串是否同时包含两个子字符串:当INSTR(string1, string2a)大于0且INSTR(string1, string2b)大于0时,则包含;否则不包含。

oracle中某个字符出现的次数怎么看出来 oracle中某个字符出现的次数怎么看出来 May 09, 2024 pm 09:33 PM

要在 Oracle 中查找字符出现的次数,执行以下步骤:获取字符串的总长度;获取字符所在子字符串的长度;计算字符出现的次数:用总长度减去子字符串长度。

oracle数据库服务器硬件配置要求 oracle数据库服务器硬件配置要求 May 10, 2024 am 04:00 AM

Oracle 数据库服务器硬件配置要求:处理器:多核,主频至少 2.5 GHz,大型数据库建议 32 核以上。内存:小型数据库至少 8GB,中等规模 16-64GB,大型数据库或高负载工作负载高达 512GB 或更多。存储:SSD 或 NVMe 磁盘,RAID 阵列提高冗余和性能。网络:高速网络(10GbE 或更高),专用网卡,低延迟网络。其他:稳定电源、冗余组件、兼容操作系统和软件、散热和冷却系统。

oracle需要多少内存 oracle需要多少内存 May 10, 2024 am 04:12 AM

Oracle 所需内存量取决于数据库大小、活动水平和所需性能水平:用于存储数据缓冲区、索引缓冲区、执行 SQL 语句和管理数据字典缓存。具体数量受数据库大小、活动水平和所需性能水平影响。最佳实践包括设置适当的 SGA 大小、调整 SGA 组件大小、使用 AMM 和监控内存使用情况。

See all articles