日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL语言之组函数(Oracle)

發布時間:2025/3/20 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL语言之组函数(Oracle) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

組函數(聚合函數)

組函數操作行集,給出每組的結果。組函數不像單行函數,組函數對行的集合進行操作,對每組給出一個結果。這些集合可能是整個表或者是表分成的組;

> 一、組函數與單行函數的區別

?單行函數對查詢到每個結果集做處理,而組函數只對分組數據做處理;
?單行函數對每個結果集返回一個結果,而組函數對每個分組返回一個結果;

> 二、組函數的類型

?Avg 平均值
?Count 計算
?Max 最大值
?Min 最小值
?Sum 合計

三、組函數的語法

四、使用組函數的原則

?用于函數的參數的數據類型可以是char、vachar2、number、date;
?所有組函數忽略空值;為了用一個值代替空值,用nvl、nvl2、coalesce函數;

五、組函數的使用

?Avg(arg)函數

對分組數據做平均值運算;
Arg:參數類型只能是數字類型;

?Sum(arg)函數

對分組數據求和;
Arg:參數類型只能是數字類型;
(以hr用戶中的employees為例)

求雇員表中的的平均薪水與薪水總額。 Select avg(salary) , sum(salary) from employees;

?Min(arg)函數

求分組數據中最小數據;
Arg:參數類型可以是字符,數字,日期;

?Max(arg)函數

求分組數據中最小數據;
Arg:參數類型可以是字符,數字,日期;
(以hr用戶中的employees為例)



求雇員表中的最高薪水與最低薪水; Select max(salary) , min(salary) from employees;

?count函數

返回一個表中的行數;
Count函數有三種格式:count(*)、count(expr)、count(distinct expr);

?Count(*)

返回表中滿足select語句標準的行數,包括重復行,包括有空值的行。如果 where子句包括在select語句中,count(*)返回滿足where子句條件的行數;
(以hr用戶中的employees為例)

返回查詢結果的總條數。 Select count(*) from employees;

?Count(expr)

返回在列中的由expr指定的非空值的數;
(以hr用戶中的employees為例)

顯示部門 80 中有傭金的雇員人數;Select count(commission_pct) from employees where department_id = 80;

?Count(distinct expr)

使用distinct關鍵字禁止計算在一列中的重復值;
(以hr用戶中的employees為例)



顯示 EMPLOYEES 表中不重復的部門數;Select count(distinct department_id) from employees;

?組函數和null值

所以組函數忽略列中的空值;
在組函數中使用nvl函數來處理空值;
(以hr用戶中的employees為例)

1.計算所有員工的傭金的平均值;Select avg(commission_pct) from employees; 2.計算有傭金的員工的傭金平均值。 Select avg(nvl(commission_pct,0)) from employees;

?創建數據組(group by)

可以根據需要將查詢到的結果集信息劃分為較小的組,用group by子句實現;
?Group by子句語法

group by子句可以把表中的行劃分為組;然后可以用組函數返回每一組的摘要信息;
?使用分組原則
1.如果在select子句中包含了組函數,就不能選擇單獨的結果,除非單獨的列出現在group by子句中。如果未能在group by子句中包含一個字段列 表,會收到一個錯誤信息;
2.使用where子句,可以在劃分行成組以前過濾行;
3.在group by子句中必須包含列;
4.在group by子句中不能用列別名;
5.默認情況下,行以包含在group by列表中的字段的升序排序。可以用order by子句覆蓋這個默認值;
?多于一個列的分組
(以hr用戶中的employees為例)



顯示在每個部門中付給每個工作崗位的合計薪水的報告。Select department_id,job_id ,sum(salary) from employees group by department_id , job_id;

?Group by子句的執行順序
先執行數據查詢,再對數據進行分組,然后執行組函數;
?非法使用group函數的查詢
1.在select列表中的任何列必須在group by子句中;
2.在group by子句中的列或表達式不必在select列表中;

修改后可為:(求各部門下的員工數)
Select department_id , count(last_name) from employees group by department_id;
?約束分組結果
1.Having子句通常與group by語句聯合使用,用來過濾有group by語句返的 記錄集;
2.Having語句的存在彌補了where關鍵字不能與聚合函數聯合使用的不足;
3.Having子句語法

(以hr用戶中的employees為例)

一、顯示那些最高薪水大于 $10,000 的部門的部門號和最高薪水。 Select em.department_id,max(em.salary) from employees em group by em.department_id having max(em.salary)>10000; 二、查詢那些最高薪水大于 $10,000 的部門的部門號和平均薪水。 Select em.department_id,avg(salary) from employees em group by em.department_id having max(em.salary)>10000;

?嵌套組函數

在使用組函數時我們也可以根據需要來做組函數的嵌套使用;
(以hr用戶中的employees為例)

顯示部門中的最大平均薪水; Select max(avg(salary)) from employees em group by em.department_id;

總結

以上是生活随笔為你收集整理的SQL语言之组函数(Oracle)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。