目錄
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;
登入後複製

Oracle範例詳解分組數據

#由於使用了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;
登入後複製

Oracle範例詳解分組數據

#注意: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;
登入後複製

Oracle範例詳解分組數據

SELECT vend_id, COUNT(*) AS num_prodsFROM productsGROUP BY vend_idHAVING COUNT(*) >= 2;
登入後複製

Oracle範例詳解分組數據

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;
登入後複製

Oracle範例詳解分組數據

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

SELECT order_num, SUM(quantity*item_price) AS ordertotalFROM orderitemsGROUP BY order_numHAVING SUM(quantity*item_price) >= 50ORDER BY ordertotal;
登入後複製

Oracle範例詳解分組數據

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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++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打不開怎麼辦 Apr 11, 2025 pm 10:06 PM

Oracle 打不開的解決辦法包括:1. 啟動數據庫服務;2. 啟動監聽器;3. 檢查端口衝突;4. 正確設置環境變量;5. 確保防火牆或防病毒軟件未阻止連接;6. 檢查服務器是否已關閉;7. 使用 RMAN 恢復損壞的文件;8. 檢查 TNS 服務名稱是否正確;9. 檢查網絡連接;10. 重新安裝 Oracle 軟件。

oracle游標關閉怎麼解決 oracle游標關閉怎麼解決 Apr 11, 2025 pm 10:18 PM

解決 Oracle 游標關閉問題的方法包括:使用 CLOSE 語句顯式關閉游標。在 FOR UPDATE 子句中聲明游標,使其在作用域結束後自動關閉。在 USING 子句中聲明游標,使其在關聯的 PL/SQL 變量關閉時自動關閉。使用異常處理確保在任何異常情況下關閉游標。使用連接池自動關閉游標。禁用自動提交,延遲游標關閉。

oracle怎麼循環創建游標 oracle怎麼循環創建游標 Apr 12, 2025 am 06:18 AM

Oracle 中,FOR LOOP 循環可動態創建游標, 步驟為:1. 定義游標類型;2. 創建循環;3. 動態創建游標;4. 執行游標;5. 關閉游標。示例:可循環創建游標,顯示前 10 名員工姓名和工資。

oracle數據庫怎麼停止 oracle數據庫怎麼停止 Apr 12, 2025 am 06:12 AM

要停止 Oracle 數據庫,請執行以下步驟:1. 連接到數據庫;2. 優雅關機數據庫(shutdown immediate);3. 完全關機數據庫(shutdown abort)。

HDFS配置CentOS需要哪些步驟 HDFS配置CentOS需要哪些步驟 Apr 14, 2025 pm 06:42 PM

在CentOS系統上搭建Hadoop分佈式文件系統(HDFS)需要多個步驟,本文提供一個簡要的配置指南。一、前期準備安裝JDK:在所有節點上安裝JavaDevelopmentKit(JDK),版本需與Hadoop兼容。可從Oracle官網下載安裝包。環境變量配置:編輯/etc/profile文件,設置Java和Hadoop的環境變量,使系統能夠找到JDK和Hadoop的安裝路徑。二、安全配置:SSH免密登錄生成SSH密鑰:在每個節點上使用ssh-keygen命令

oracle動態sql怎麼創建 oracle動態sql怎麼創建 Apr 12, 2025 am 06:06 AM

可以通過使用 Oracle 的動態 SQL 來根據運行時輸入創建和執行 SQL 語句。步驟包括:準備一個空字符串變量來存儲動態生成的 SQL 語句。使用 EXECUTE IMMEDIATE 或 PREPARE 語句編譯和執行動態 SQL 語句。使用 bind 變量傳遞用戶輸入或其他動態值給動態 SQL。使用 EXECUTE IMMEDIATE 或 EXECUTE 執行動態 SQL 語句。

oracle日誌寫滿怎麼辦 oracle日誌寫滿怎麼辦 Apr 12, 2025 am 06:09 AM

Oracle 日誌文件寫滿時,可採用以下解決方案:1)清理舊日誌文件;2)增加日誌文件大小;3)增加日誌文件組;4)設置自動日誌管理;5)重新初始化數據庫。在實施任何解決方案前,建議備份數據庫以防數據丟失。

甲骨文在商業世界中的作用 甲骨文在商業世界中的作用 Apr 23, 2025 am 12:01 AM

Oracle不僅是數據庫公司,還是雲計算和ERP系統的領導者。 1.Oracle提供從數據庫到雲服務和ERP系統的全面解決方案。 2.OracleCloud挑戰AWS和Azure,提供IaaS、PaaS和SaaS服務。 3.Oracle的ERP系統如E-BusinessSuite和FusionApplications幫助企業優化運營。

See all articles