Oracle分組查詢

来源:https://www.cnblogs.com/xiaomingit/archive/2019/07/22/11228831.html
-Advertisement-
Play Games

分組查詢 分組函數 :group by 要分組的列名 對數據集合處理的函數,可以處理多行數據--5個分組函數--count --計數函數,用於數量的統計--sum 求和函數,對數據進行求和--avg 求評平均,對一組數據求平均值--min ,求最小值--max ,求最大值--分組函數,也叫統計函數, ...


分組查詢


分組函數 :group by 要分組的列名 對數據集合處理的函數,可以處理多行數據
--5個分組函數
--count --計數函數,用於數量的統計
--sum 求和函數,對數據進行求和
--avg 求評平均,對一組數據求平均值
--min ,求最小值
--max ,求最大值
--分組函數,也叫統計函數,一般也做數據統計使用

例子:
--查詢出10部門的最高工資和最低工資,平均工資;
select max(sal) ,min(sal) ,avg(sal) from emp where deptno=10;
--查詢出入職日期在1981年6月後的員工數量,及平均工資
select count(*) ,avg(sal) from emp where to_char(hiredate,'yyyy-mm') >= '1981-06';
select count(*),avg(sal) from emp where hiredate>=to_date('1981-06','yyyy-mm');
--查詢出公司每月的工資支出是多少
select sum(sal) from emp;
--公司員工普提工資上調50%,查詢公司上調工資前後,每月工資支出
select sum(sal),sum(sal+(sal*0.5)) from emp;

1. select 語句的執行順序:
from -> where -> group by -> having -> select - order by
– 1.通過FROM子句中找到需要查詢的表;
– 2.通過WHERE子句進行非分組函數篩選判斷;
– 3.通過GROUP BY子句完成分組操作;
– 4.通過HAVING子句完成組函數篩選判斷;
– 5.通過SELECT子句選擇顯示的列或表達式及組函數;
– 6.通過ORDER BY子句進行排序操作。
例子:查詢出入職日期在1981年2月後的員工信息,並按照部門進行分組,查詢出每個部門的平均工資,並且平均工資在2600以上 ,按照平均工資進行倒序排序
select deptno, avg(sal) avgsal
from emp
where hiredate >= to_date('1981-02', 'yyyy-mm')
group by deptno
having avg(sal) > 2500
order by avg(sal) desc;

2. 聯合主鍵
例子:按入職年份和部門進行統計,查詢出各部門各入職年份的最高工資和最低工資,多列統計
理解:就是按照入職年份,部門進行分組
select to_char(hiredate,'yyyy'),deptno,max(sal),min(sal) from emp group by to_char(hiredate,'yyyy'),deptno;

3. 主函數中的distinct函數
1)DISTINCT會消除重覆記錄後再使用組函數
--理解distinct 關鍵與組函數的組合使用,用於何種場合
例如:統計員工所在的部門的數量
select count(deptno),count(distinct deptno) from emp;
2)遇到有null空值數據時,可以組合單行函數進行使用
例如:統計員工的平均獎金,沒有獎金看為0
select count(*),count(comm),avg(comm),avg(nvl(comm,0)) from emp;

分組查詢時註意:
1.帶group by的分組查詢,執行順序是先分組group by 後查詢 select,即,寫在select 後面的列,必須是分組列,或 組函數
2.where條件中不能直接使用組函數
3.分組數據可以使用having字句進行過濾
4.分組列可以不在select子句中顯示,select 列中要顯示的列,必須出現在group by 分組中(在select 子句中非組函數列,都必須添加到group by 中)
5.having 是對group by分組後的數據進行過濾
6.組查詢語句可以使用在:select ,having ,order by 。不能直接使用在

4. count統計函數
count(*) 和count(列名)
在count 統計中,不統計值為null的行
阿裡巴巴的編碼規範:在做行數統計時,要求使用count(*),以獲得更高的效率或準確率

5.分組函數中空值處理
1).除了COUNT(*)之外,其它所有分組函數都會忽略列中的空值,然後再進行計算。
2 ). 在分組函數中使用NVL函數
– NVL 函數可以使分組函數強制包含含有空值的記錄
3).遇到有null空值數據時,可以組合單行函數進行使用
例如:統計員工的平均獎金,沒有獎金看為0
select count(*),count(comm),avg(comm),avg(nvl(comm,0)) from emp;


--補充說明
1). min 和 max 統計字元類型時,會根據字元的先後順序進行統計
min和max統計時,如果數值為null,則不統計
MIN和MAX可以用於任何數據類型
例如:查詢入職日期最早和最晚的日期
MIN(hiredate) 最早日期 , MAX(hiredate) 最晚日期

2). SUM和AVG函數都是只能夠對數值類型的列或表達式操作。
例如:查詢工資總和,平均工資
SUM(sal),AVG(sal) ,

3).COUNT函數的主要功能是返回滿足條件的每組記錄條數
COUNT(*):返回表中滿足條件的行記錄數

4). 組函數中DISTINCT:DISTINCT會消除重覆記錄後再使用組函數

其他三個函數是具有相同特性
select * from emp;
select min(job),max(job) from emp;
select min(ename),max(ename) from emp;
select min(comm),max(comm) = emp;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Mac安裝kubectl brew install kubernetes-cli 找到伺服器上的apiserver.crt文件,一般在/etc/kubernetes/pki中 執行如下命令: openssl x509 -in apiserver.crt -noout -text | grep DNS ...
  • 導讀:本文翻譯自 Brendan Gregg 去年的一片博客文章 “CPU Utilization is Wrong”,從標題就能想到這篇文章將會引起爭議。文章一上來就說,我們“人人皆用、處處使用,每個性能監控工具里都在用”的 top 命令里的 “%CPU” 指標,是不對的,其並非用於衡量 CPU ...
  • win10筆記本連上WiFi,顯示“無internet,安全”,本文提供了6種解決辦法 ...
  • 本文首發於:微信公眾號「運維之美」,公眾號 ID:Hi Linux。 ​「運維之美」是一個有情懷、有態度,專註於 Linux 運維相關技術文章分享的公眾號。公眾號致力於為廣大運維工作者分享各類技術文章和發佈最前沿的科技信息。公眾號的核心理念是:分享,我們認為只有分享才能使我們的團體更強大。如果你想第 ...
  • STM32里I2C_CheckEvent函數我們應該是相當熟悉了,在每次發送數據後我們都需要檢驗相應的EVx(x = 0,1,2,,,)事件是否有發送。 函數定義如下: 該函數第一個參數是輸入需要檢查的I2Cx(x = 1,2,3,4,5)外設,第二個參數是檢查的事件,如下所示: I2C_EVENT ...
  • 本文首發於:微信公眾號「運維之美」,公眾號 ID:Hi Linux。 ​「運維之美」是一個有情懷、有態度,專註於 Linux 運維相關技術文章分享的公眾號。公眾號致力於為廣大運維工作者分享各類技術文章和發佈最前沿的科技信息。公眾號的核心理念是:分享,我們認為只有分享才能使我們的團體更強大。如果你想第 ...
  • 我們在Linux系統中如何找到文件系統的掛載時間呢,下麵實驗測試環境為RHEL 6.6,其它Linux版本沒有驗證測試。這個簡單測試了一下常用的ext3/4、xfs、nfs文件系統。 ext文件系統 如果文件系統類型為ext3、ext4(ext2沒有測試,這麼老的文件系統也沒有多少意義了),那麼可以... ...
  • 查看 sql查詢記錄 日誌是否開啟 二進位日誌 是否開啟 開啟與關閉二進位日誌 mysql-bin.000001刪除二進位日誌文件方法,執行以下語句(不要直接刪除文件) 我用的是寶塔.不知為何用以上方法無效.在管理面板裡面設置才行.用其他軟體搭建的環境應該用以上方法可以吧,有待嘗試 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...