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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

SQL基础操作_6_处理数字

發(fā)布時(shí)間:2024/9/27 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL基础操作_6_处理数字 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

7.7 處理數(shù)字

7.7.1 計(jì)算某列的最小/大值

7.7.2 計(jì)算某列的平均值

7.7.3 計(jì)算某列的總和

7.7.4 計(jì)算表的行數(shù)

7.7.5 非NULL值的列的個(gè)數(shù)

7.7.6 NULL值的列的個(gè)數(shù)

7.7.7 含NULL值的列的聚合

7.7.8 計(jì)算累加值

7.7.9 計(jì)算累加乘

7.7.10 計(jì)算累加差

7.7.11 計(jì)算某列重復(fù)最多的值

7.7.12 計(jì)算某列的中間值

7.7.13 計(jì)算組內(nèi)總和的占比

7.7.14 計(jì)算組總和的占比

7.7.15 計(jì)算不含最大/小值的均值

7.7.16 計(jì)算標(biāo)準(zhǔn)差


7.7 處理數(shù)字

注:數(shù)據(jù)集和表結(jié)構(gòu)見(jiàn)?SQL基礎(chǔ)操作_1_檢索數(shù)據(jù)

7.7.1 計(jì)算某列的最小/大值

需求:按照部門(mén)編號(hào)分組找出EMP表中工資最低/最高值,同時(shí)返回出deptno

解決方法:通過(guò)聚合函數(shù)MIN/MAX結(jié)合GROUP BY來(lái)完成.

SQLServer、Mysql、Oracle:

SELECT DEPTNO,MIN(SAL) Min_SAL,MAX(SAL) Max_SAL FROM emp GROUP BY DEPTNO

執(zhí)行結(jié)果:

DEPTNO

Min_SAL

Max_SAL

10

1300.00

5000.00

20

800.00

3000.00

30

950.00

2850.00

延展閱讀:

如果想計(jì)算出所有emp表里工資的最低和最高,則只需要取MIN和MAX即可,不加GROUP BY.

SELECT MIN(SAL) Min_SAL,MAX(SAL) Max_SAL FROM emp

執(zhí)行結(jié)果:

Min_SAL

Max_SAL

800.00

5000.00

7.7.2 計(jì)算某列的平均值

需求:按照部門(mén)編號(hào)分組找出EMP表中工資平均值,同時(shí)返回出deptno

解決方法:通過(guò)聚合函數(shù)AVG結(jié)合GROUP BY來(lái)完成.

SQLServer、Mysql、Oracle:

SELECT DEPTNO,AVG(SAL) Avg_SAL FROM emp GROUP BY DEPTNO

執(zhí)行結(jié)果:

DEPTNO

Avg_SAL

10

2916.666667

20

2175.000000

30

1566.666667

7.7.3 計(jì)算某列的總和

需求:按照部門(mén)編號(hào)分組找出EMP表中工資總和,同時(shí)返回出deptno

解決方法:通過(guò)聚合函數(shù)SUN結(jié)合GROUP BY來(lái)完成.

SQLServer、Mysql、Oracle:

SELECT DEPTNO,SUM(SAL) Sum_SAL FROM emp GROUP BY DEPTNO

執(zhí)行結(jié)果:

DEPTNO

Sum_SAL

10

8750.00

20

10875.00

30

9400.00

7.7.4 計(jì)算表的行數(shù)

需求: 計(jì)算EMP表的總行數(shù).? ? ? ? ? ? ? ??

解決方法:通過(guò)COUNT(*)來(lái)完成.

SQLServer、Mysql、Oracle:

SELECT COUNT(*) AS rowCnt FROM emp

執(zhí)行結(jié)果:

rowCnt

14

7.7.5 非NULL值的列的個(gè)數(shù)

需求:取EMP表里COMM字段非空的個(gè)數(shù).? ? ??

解決方法:通過(guò)COUNT(comm)來(lái)完成.

Sql Server、Mysql、Oracle:

SELECT COUNT(comm) AS Comm_Cnt FROM emp

執(zhí)行結(jié)果:

Comm_Cnt

4

7.7.6 NULL值的列的個(gè)數(shù)

需求:取EMP表里COMM字段為空的個(gè)數(shù).? ? ??

解決方法:通過(guò)SUM CASEWHEN comm IS NULL … 來(lái)統(tǒng)計(jì).

Sql Server、Mysql、Oracle:

SELECT SUM(CASE WHEN comm IS NULL THEN 1 ELSE 0 END) AS NULL_Num FROM emp WHERE comm IS NULL;

執(zhí)行結(jié)果:

NULL_Num

10

7.7.7 含NULL值的列的聚合

需求:驗(yàn)證行NULL的列的聚合函數(shù)的計(jì)算結(jié)果.

解決方法:通過(guò)MIN、MAX、SUM、AVG、COUNT(*)來(lái)完成.

Sql Server、Mysql、Oracle:

SELECT MIN(DATA) Min_Data,MAX(DATA) Max_Data,SUM(DATA) Sum_Data,AVG(DATA) Avg_Data,COUNT(*) AS Row_Cnt FROM ( SELECT 1 AS DATAUNION ALL SELECT NULL AS DATAUNION ALL SELECT 3 AS DATAUNION ALL SELECT NULL AS DATA )A

執(zhí)行結(jié)果:

Min_Data

Max_Data

Sum_Data

Avg_Data

Row_Cnt

1

3

4

2

4

由上面的結(jié)果可見(jiàn),AVG時(shí)NULL值未參與運(yùn)算.

7.7.8 計(jì)算累加值

需求:計(jì)算EMP表里SAL字段的累加值,這里按照SAL、EMPNO排序.

解決方法:通過(guò)SUM OVER()函數(shù)來(lái)完成.

Sql Server、Oracle:

SELECT sal,empno,SUM(sal)OVER(ORDER BY sal,empno) Accu_Num FROM emp;

執(zhí)行結(jié)果:

sal

empno

accu_Num

800.00

7369

800.00

950.00

7900

1750.00

1100.00

7876

2850.00

1250.00

7521

4100.00

1250.00

7654

5350.00

1300.00

7934

6650.00

1500.00

7844

8150.00

1600.00

7499

9750.00

2450.00

7782

12200.00

2850.00

7698

15050.00

2975.00

7566

18025.00

3000.00

7788

21025.00

3000.00

7902

24025.00

5000.00

7839

29025.00

Sql Server、Oracle 、Mysql:

SELECT B.sal,B.empno,(SELECT SUM(A.sal) FROM emp A WHERE A.empno<=B.empno) AS Accu_Cnt FROM emp B ORDER BY Accu_CntSELECT B.sal,B.empno,SUM(A.sal) AS Accu_Cnt FROM emp B JOIN emp AON A.empno <=B.empno GROUP BY B.sal,B.empno ORDER BY Accu_Cnt

7.7.9 計(jì)算累加乘

需求:計(jì)算EMP表里SAL字段的累計(jì)乘積值,這里按照SAL、EMPNO排序.

解決方法:通過(guò)SUM OVER()EXP LOG LN函數(shù)來(lái)完成.

Sql Server:

SELECT sal,empno,LOG(sal) AS Log_Sal,EXP(SUM(LOG(sal))OVER(ORDER BY sal,empno)) Accu_Prod FROM emp;

執(zhí)行結(jié)果:

sal

empno

Log_Sal

Accu_Prod

800.00

7369

6.68461172766793

800

950.00

7900

6.85646198459459

759999.999999999

1100.00

7876

7.00306545878646

836000000

1250.00

7521

7.13089883029635

1045000000000

1250.00

7654

7.13089883029635

1.30625E+15

1300.00

7934

7.17011954344963

1.698125E+18

1500.00

7844

7.3132203870903

2.5471875E+21

1600.00

7499

7.37775890822787

4.07550000000002E+24

2450.00

7782

7.80384330353877

9.98497500000001E+27

2850.00

7698

7.9550742732627

2.845717875E+31

2975.00

7566

7.99799931797973

8.46601067812504E+34

3000.00

7788

8.00636756765025

2.5398032034375E+38

3000.00

7902

8.00636756765025

7.61940961031249E+41

5000.00

7839

8.51719319141624

3.80970480515626E+45

Oracle:

SELECT sal,empno,LN(sal) AS Log_Sal,EXP(SUM(LN(sal))OVER(ORDER BY sal,empno)) Accu_Prod FROM emp;

Mysql:

SELECT B.sal,B.empno,(SELECT exp(SUM(ln(A.sal))) FROM emp A WHERE A.empno<=B.empno) AS Accu_Cnt FROM emp B ORDER BY Accu_CntSELECT B.sal,B.empno,exp(SUM(ln(A.sal))) AS Accu_Cnt FROM emp B JOIN emp AON A.empno <=B.empno GROUP BY B.sal,B.empno ORDER BY Accu_Cnt

7.7.10 計(jì)算累加差

需求:計(jì)算EMP表里SAL字段的累計(jì)乘積值,這里按照SAL、EMPNO排序.

解決方法:通過(guò)SUM OVER()函數(shù)來(lái)完成,這里SAL要取反,即SAL的負(fù)數(shù).

Sql Server、Oracle:

SELECT deptno,sal,empno,SUM(CASE WHEN RN=1 THEN SAL ELSE -sal END)OVER(PARTITION BY deptno ORDER BY sal,empno) Accu_Diff FROM ( SELECT deptno,sal,empno,ROW_NUMBER()OVER(PARTITION BY deptno ORDER BY sal,empno)RN FROM emp )A

執(zhí)行結(jié)果:

deptno

sal

empno

Accu_Diff

10

1300.00

7934

1300.00

10

2450.00

7782

-1150.00

10

5000.00

7839

-6150.00

20

800.00

7369

800.00

20

1100.00

7876

-300.00

20

2975.00

7566

-3275.00

20

3000.00

7788

-6275.00

20

3000.00

7902

-9275.00

30

950.00

7900

950.00

30

1250.00

7521

-300.00

30

1250.00

7654

-1550.00

30

1500.00

7844

-3050.00

30

1600.00

7499

-4650.00

30

2850.00

7698

-7500.00

Mysql:

暫未實(shí)現(xiàn).

?

7.7.11 計(jì)算某列重復(fù)最多的值

需求:計(jì)算EMP表里SAL字段重復(fù)最多的值,以部門(mén)編號(hào)為20的為例.

解決方法:通過(guò)窗口函數(shù)或則借助聚合函數(shù)來(lái)完成.

Sql Server、Mysql:

SELECT sal FROM emp WHERE deptno=20 GROUP BY sal HAVING COUNT(*) >= ALL (SELECT COUNT(*) FROM emp WHERE deptno =20 GROUP BY SAL) -- 或者將ALL換成MAX SELECT sal FROM emp WHERE deptno=20 GROUP BY sal HAVING COUNT(*) >= (SELECT MAX(RN) FROM(SELECT COUNT(*) AS RN FROM emp WHERE deptno =20 GROUP BY SAL)A )

Oracle:

7.7.12 計(jì)算某列的中間值

需求:計(jì)算EMP表按照deptno分組,找出排在中間的SAL

解決方法:通過(guò)窗口函數(shù)集合COUNT(*)通過(guò)序號(hào)取模來(lái)判斷.

SQL Server:

SELECT B.deptno,A.sal middle_Sal,B.row_CN,CASE WHEN (B.row_CN%2=0) THEN B.row_CN/2 ELSE (row_CN+1)/2 END Middle FROM ( SELECT empno,sal,deptno,ROW_NUMBER()OVER(PARTITION BY deptno ORDER BY sal) AS RN FROM emp)A JOIN(SELECT deptno,COUNT(*) AS row_CN FROM empGROUP BY deptno)B ON A.deptno = B.deptno AND A.RN = CASE WHEN (B.row_CN%2=0) THEN B.row_CN/2 ELSE (row_CN+1)/2 END

執(zhí)行結(jié)果:

deptno

middle_Sal

row_CN

Middle

10

2450.00

3

2

20

2975.00

5

3

30

1250.00

6

3

同理我們可以在mysql實(shí)現(xiàn):

SELECT B.deptno,A.SAL,B.row_CN,ROUND(CASE WHEN (B.row_CN%2=0) THEN B.row_CN/2 ELSE (row_CN+1)/2 END) AS Middle FROM ( SELECT heyf_tmp.deptno,heyf_tmp.empno,heyf_tmp.sal,@rownum :=@rownum+1AS rn ,IF(@pdept= heyf_tmp.deptno,@rank:=@rank+1, @rank:=1) AS rank,@pdept:=heyf_tmp.deptno AS pre_deptnoFROM ( SELECT A.deptno,A.sal,A.empno FROM emp AORDER BY deptno,sal) heyf_tmp ,(SELECT @rownum :=0 , @pdept :=NULL ,@rank :=0) a )A JOIN ( SELECT deptno,COUNT(*) AS row_CN FROM empGROUP BY deptno ) B ON A.deptno = B.deptno AND A.RANK =CASE WHEN (B.row_CN%2=0) THEN B.row_CN/2 ELSE (row_CN+1)/2 END

執(zhí)行結(jié)果:

deptno

SAL

row_CN

Middle

10

2450.00

3

2

20

2975.00

5

3

30

1250.00

6

3

7.7.13 計(jì)算組內(nèi)總和的占比

需求:計(jì)算EMP表按照deptno分組,計(jì)算SAL在每組總和中的占比

解決方法:通過(guò)每行的SAL除以每組的SUM(SAL)來(lái)實(shí)現(xiàn).

SQL Server:

SELECT A.deptno,SAL,CAST(ROUND(SAL/sum_num,2) AS DECIMAL(10, 2)) AS percent FROM emp A JOIN ( SELECT deptno,SUM(SAL) AS sum_num FROM emp GROUP BY deptno )B ON A.deptno = B.deptno

執(zhí)行結(jié)果:

deptno

SAL

percent

10

2450.00

0.28

10

5000.00

0.57

10

1300.00

0.15

20

3000.00

0.28

20

1100.00

0.10

20

3000.00

0.28

20

800.00

0.07

20

2975.00

0.27

30

1250.00

0.13

30

2850.00

0.30

30

1600.00

0.17

30

1250.00

0.13

30

1500.00

0.16

30

950.00

0.10

Mysql:

SELECT A.deptno,SAL,ROUND(SAL/sum_num,2) AS percent FROM emp A JOIN ( SELECT deptno,SUM(SAL) AS sum_num FROM emp GROUP BY deptno )B ON A.deptno = B.deptno

7.7.14 計(jì)算組總和的占比

需求:計(jì)算EMP表按照deptno分組,計(jì)算每組的SAL總和與所以記錄總和中的占比

解決方法:通過(guò)每組SUM(SAL)窗口函數(shù)再除以記錄總和來(lái)實(shí)現(xiàn).

Sql Server、Oracle:

SELECT DISTINCT deptno,SUM(SAL)OVER(PARTITION BY deptno) AS sum_num,SUM(SAL) OVER() AS sum_total, CAST(ROUND(SUM(SAL)OVER(PARTITION BY deptno)/SUM(SAL)OVER(),2)AS DECIMAL(10, 2)) AS group_percent FROM emp

執(zhí)行結(jié)果:

deptno

sum_num

sum_total

group_percent

10

8750.00

29025.00

0.30

20

10875.00

29025.00

0.37

30

9400.00

29025.00

0.32

Sql Server:

SELECT deptno,CAST(SUM(SAL)/(SELECT SUM(SAL) FROM EMP)AS DECIMAL(10, 2)) AS group_percent FROM EMP GROUP BY deptno

Mysql:

SELECT deptno,ROUND(SUM(SAL)/(SELECT SUM(SAL) FROM EMP), 2) AS group_percent FROM EMP GROUP BY deptno

執(zhí)行結(jié)果:

deptno

group_percent

10

0.30

20

0.37

30

0.32

?

7.7.15 計(jì)算不含最大/小值的均值

需求:計(jì)算EMP表按照deptno分組,計(jì)算每組的SAL均值,這里不包含最大和最小值.

解決方法:通過(guò)每組踢除最大/小值再AVG的方式來(lái)實(shí)現(xiàn).

Sql ServerMysql、Oracle:

SELECT A.deptno,AVG(A.SAL) AS avg_SAL FROM EMP A LEFT JOIN ( SELECT deptno,MIN(SAL) AS SAL FROM EMPGROUP BY deptno UNIONSELECT deptno,MAX(SAL) AS SAL FROM EMPGROUP BY deptno )B ON A.deptno = B.deptno AND A.SAL = B.SAL WHERE B.deptno IS NULL GROUP BY A.deptno

執(zhí)行結(jié)果:

deptno

avg_SAL

10

2450.000000

20

2037.500000

30

1400.000000

7.7.16 計(jì)算標(biāo)準(zhǔn)差

需求:計(jì)算EMP表按照deptno分組,計(jì)算每組的SAL的標(biāo)準(zhǔn)差.

解決方法:通過(guò)每組踢出最大/小值再AVG的方式來(lái)實(shí)現(xiàn).

SQL Server:

SELECT DEPTNO,STDEVP(SAL) AS Stdevp_Value FROMEMP GROUP BY DEPTNO

執(zhí)行結(jié)果:

DEPTNO

Stdevp_Value

10

1546.14215244122

20

1004.73877201987

30

610.100173924104

注:

1)? 標(biāo)準(zhǔn)差的公式見(jiàn)下:

2) STDEVP和STDEV的區(qū)別是STDEVP除以的是N,而STDEV除以的是N-1

Mysql:

SELECT A.DEPTNO,SQRT(SUM(POWER((A.SAL-avg_SAL),2))/cnt) Stdevp_Value FROM EMP A JOIN ( SELECT DEPTNO,AVG(SAL) AS avg_SAL,COUNT(*) AS cnt FROM EMP GROUP BY DEPTNO )B ON A.deptno = B.deptno GROUP BY A.deptno

結(jié)果同上.

總結(jié)

以上是生活随笔為你收集整理的SQL基础操作_6_处理数字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99精品欧美一区二区 | 色欲人妻综合网 | 亚洲第九页 | 久久新| 国产做爰xxxⅹ久久久精华液 | 三级成人在线 | 中文国产在线观看 | 亚洲视频精选 | 国产精品久久亚洲 | 中文在线√天堂 | 影音先锋男人资源网站 | 在线观看国产三级 | 国产女人精品视频 | 萌白酱在线观看 | 亚洲欧洲另类 | 色涩色| 麻豆精品av | 欧美三级韩国三级日本三斤在线观看 | 亚洲性视频网站 | 2022国产精品 | 中文字幕高清在线免费播放 | 国产精品国产精品国产专区不卡 | 欧美日韩1区2区3区 亚洲日本精品视频 | 99精品在线免费观看 | 精品孕妇一区二区三区 | 欧洲亚洲一区二区三区 | 中文字幕精品视频在线观看 | 日韩人妻无码精品综合区 | 美女网站在线看 | 欧美网站在线观看 | 成人激情文学 | 激情综合啪啪 | 成人高潮片 | 1515hh成人免费看 | 午夜久久网 | 国产精品日韩专区 | 九九热伊人 | 欧洲精品久久久久毛片完整版 | 在线观看成人 | 自拍偷拍亚洲欧洲 | 免费av毛片 | 奇米色综合 | 天堂资源站 | 男女av网站 | 中国女人裸体乱淫 | 国产十区 | 天堂中文在线看 | av免费网站观看 | 妞干网av| 在线免费观看日韩av | 欧美黄色一区二区三区 | 日本亚洲国产 | 久久久成人av | 午夜噜噜 | www.com亚洲 | 人妻少妇精品中文字幕av蜜桃 | 日韩中文久久 | 男人舔女人下部高潮全视频 | 在线视频观看你懂得 | 色哟哟网站入口 | 国产女人被狂躁到高潮小说 | 亚洲精品ww | 美人被强行糟蹋np各种play | 国产精品色哟哟 | 亚洲青涩在线 | 麻豆久久久 | 一本久久久久 | 精品少妇人妻一区二区黑料社区 | 国产高清av | 性爱动漫| 精品国产伦一区二区三区免费 | 男人天堂v| 欧美不卡 | 催眠美妇肉奴系统 | 91视频在线免费观看 | 91精品综合久久久久久五月天 | 日韩精品免费播放 | 香蕉视频污在线观看 | 8x8ⅹ国产精品一区二区 | 免费看女生裸体视频 | 极品色av | 紧身裙女教师三上悠亚红杏 | 日韩在线综合 | 欧美18aaaⅹxx | 男操女免费网站 | 日本精品人妻无码免费大全 | 久久国产精品99久久人人澡 | 亚洲欧美激情在线观看 | 91看片视频| 美女一二区 | 欧美黄色一级网站 | 有码在线视频 | 福利所第一导航 | 无码少妇一区二区三区芒果 | 日韩欧美亚洲天堂 | 久久国产精品久久国产精品 | 国产特级黄色片 | 波多野结衣免费在线视频 | 欧美另类在线播放 |