本篇文章為大家帶來了關於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中文網其他相關文章!

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Dreamweaver Mac版
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

禪工作室 13.0.1
強大的PHP整合開發環境