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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

group by的一点小说明

發布時間:2023/12/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 group by的一点小说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工作閑暇之余,看了看oracle的書,看到一個點,覺得很有用,利用這個點,希望大家有收獲,同時與希望大家在寫SQL的時候,think?twic,make?choice(三思而后行)

下面看需求:

統計所有領取傭金和不領取傭金的人數、平均工資

這個需求,看上去很簡單,第一思維就是使用group?by? 進行分組,求結果。但是有坑,請看下面代碼與結果

select * from emp;------------------------------------ emopno ename job sal hiredate sal comm deptno 7369 SMITH CLERK 7902 1980/12/17 800.00 20 7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30 7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30 7566 JONES MANAGER 7839 1981/4/2 2975.00 20 7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30 7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30 7782 CLARK MANAGER 7839 1981/6/9 2450.00 10 7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20 7839 KING PRESIDENT 1981/11/17 5000.00 10 7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30 7876 ADAMS CLERK 7788 1987/5/23 1100.00 20 7900 JAMES CLERK 7698 1981/12/3 950.00 30 7902 FORD ANALYST 7566 1981/12/3 3000.00 20 7934 MILLER CLERK 7782 1982/1/23 1300.00 10 --統計所有領取傭金和不領取傭金的人數、平均工資 select comm,count(*),avg(sal) from emp e group by e.comm; --結果 comm count(*) avg(sal)10 2342.5 1400.00 1 1250 500.00 1 1250 300.00 1 1600 0.00 1 1500

執行完語句,發現結果不對!!

問題:使用group by的時候會把每一個種子值(comm)當做一個分組,所以不可能直接使用group by。

現在把需求拆分:

1、統計所有領取傭金的人數、平均工資

2、統計所有不領取傭金的人數、平均工資

3、把1、2合并,就成了:統計所有領取傭金和不領取傭金的人數、平均工資

正確寫法如下:

select '領取傭金' info, count(*), avg(sal)from emp ewhere e.comm is not null union select '不領取傭金' info, count(*), avg(sal)from emp ewhere e.comm is null;--結果: info count(*) avg(sal) 不領取傭金 10 2342.5 領取傭金 4 1400

這個例子說明了,要把需求分析清楚,在寫語句,同時并不是什么時候都適合用分組,要具體情況具體分析:think?twic,make?choice(三思而后行)

總結

以上是生活随笔為你收集整理的group by的一点小说明的全部內容,希望文章能夠幫你解決所遇到的問題。

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