oracle表複雜查詢

林堯彬發表於2020-04-04

在實際應用中經常需要執行復雜的資料統計,經常需要顯示多張表的資料,現在我們給大家介紹較為複雜的select語句

資料分組  max  min  avg  sum  count

?       如何顯示所有員工中最高工資和最低工資

select max(sal),min(sal) from emp;

?       顯示所有員工的平均工資和工資總和

select avg(sal),sum(sal) from emp;

☞avg(comm)不會把comm為null的行進行統計,因此我們要注意,如果希望為null的也考慮,則我們可以這樣做:

select sum(comm)/count(*) form emp;

?       計算共有多少員工

select count(*) from emp;

細節:count(*),也可以對一個欄位進行統計,比如:count(sal);

      count(comm)不考慮為null進行統計。

擴充套件要求:

?       請顯示工資最高的員工的名字,工作崗位

select ename,job from emp where sal=(select max(sal) from emp);

?       請顯示工資高於平均工資的員工資訊

select * from emp where sal>(select  avg(sal)  from emp);

select 語句執行的順序

(1)我們寫SQL語句是從左到右

(2)SQL執行在預設情況下是從右向左執行。

(3)無論select有多少,oracle有執行順序。

group byhaving字句

group by 用於對查詢的結果分組統計   having字句用於限制(過濾)分組顯示結果

?       如何顯示每個部門的平局工資和最高工資

select avg(sal),max(sal),deptno from emp group by deptno;

?       顯示每個部門的每種崗位的平均工資和最低工資

select avg(sal),min(sal),deptno,job from emp group by deptno,job order by deptno;

?       顯示平均工資低於2000的部門號和它的平均工資

select deptno,avg(sal) from emp group by deptno having avg(sal)<2000;

having不能使用別名

SQL> select deptno,avg(sal) myavg from emp group by deptno having myavg<2000;

select deptno,avg(sal) myavg from emp group by deptno having myavg<2000

ORA-00904: "MYAVG": 識別符號無效

 

對資料分組的總結

1、分組函式(avg...)只能出現在選擇列表、having、order by字句中

select avg(sal),deptno from emp group by deptno having avg(sal)>100 order by avg(sal) desc;

2、如果在select語句中同時包含有group  by,having,order  by,那麼它們的順序是group by,having,order by。

3、在選擇列中如果有列、表示式、分組函式,那麼這些列和表示式必須有一個出現在group by字句中,否則就會出錯

 

如select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000;

這裡deptno就一定要出現在group by中。

SQL> select avg(sal),deptno,job from emp group by job having avg(sal)>100 order by avg(sal);

select avg(sal),deptno,job from emp group by job having avg(sal)>100 order by avg(sal)

ORA-00979: 不是 GROUP BY 表示式

SQL> select avg(sal),deptno,job from emp group by job,deptno having avg(sal)>100 order by avg(sal);

  AVG(SAL) DEPTNO JOB

---------- ------ ---------

       950     30 CLERK

       950     20 CLERK

      1300     10 CLERK

      1400     30 SALESMAN

      2450     10 MANAGER

      2850     30 MANAGER

      2975     20 MANAGER

      3000     20 ANALYST

      5000     10 PRESIDENT

9 rows selected

轉載於:https://www.cnblogs.com/fanweisheng/p/11113683.html

相關文章