select查詢之二:分組與排序

skyin_1603發表於2016-10-08
平時,為了更容易看查詢出來的資料,我們往往透過一些分組或者排序處理,
在這裡簡單講一下分組字句group by 與排序order by 字句的簡單應用,其中,
order by 字句永遠放在查詢語句的最後面。

Select語句的總結構:

Select [欄位] [限制條件]  

from [資料表]  /子查詢[巢狀查詢]

where [篩選條件]  /子查詢[巢狀查詢]

group by[分組欄位]  /子查詢[巢狀查詢]

Having [輔助篩選條件] /子查詢[巢狀查詢]

order by[排序欄位];

Group by一般情況下與一些聚合函式(統計函式)max、min、count與avg等搭配使用,
有時也搭配having字句使用,having字句一般放在Group by後面。having指明分組結果
的條件,不能單獨使用,一般與Group by一起使用。Group by可以單獨使用having單獨是相對where功能。


1、Group by字句語having字句並用:
在HR使用者,查詢employees表,要求:大於5人的job_id的最大薪金,最小薪金,人數。

 select max(salary),min(salary),count(job_id)

  2   from employees

  3   group by job_id

  4  having count(job_id)>5;

MAX(SALARY) MIN(SALARY) COUNT(JOB_ID)

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

       4200        2500            20

      11500        6100            30

       3600        2100            20

 2、Group by字句單獨使用:

統計emp中每個部門的工資總和及每個部門的人數

SQL> select sum(sal),count(empno)

  2  from emp

  3  group by deptno;

  SUM(SAL) COUNT(EMPNO)

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

      9400            6

     10875            5

      8750            3


3、Order by字句:

Order by字句起到排序作用,可以按照升序ASC排列查詢出來的資料,
或者降序DESC排預設情況排序是升序。

檢視emp表的所有資訊:

SQL> select  empno,ename,sal,deptno

  2  from emp

  3  order by deptno;

     EMPNO ENAME             SAL     DEPTNO

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

      7782 CLARK            2450         10

      7839 KING             5000         10

      7934 MILLER           1300         10

      7566 JONES            2975         20

      7902 FORD             3000         20

      7876 ADAMS            1100         20

      7369 SMITH             800         20

      7788 SCOTT            3000         20

      7521 WARD             1250         30

      7844 TURNER           1500         30

      7499 ALLEN            1600         30


     EMPNO ENAME             SAL     DEPTNO

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

      7900 JAMES             950         30

      7698 BLAKE            2850         30

      7654 MARTIN           1250         30

14 rows selected.

4、可以多個欄位排序:

SQL> select grade,cno

  2  from sc

  3  order by cno desc,grade desc;

     GRADE        CNO

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

        99          3

        93          3

        93          3

        85          3

        92          2

        92          2

        88          2

        75          2

        91          1

        88          1

        80          1

        65          1

12 rows selected.

5、 Order by字句中使用欄位代號:

檢視部門號為30的員工資訊,並按照工資從高到低排序:

SQL> select  empno,ename,sal,deptno

  2  from emp

  3  where deptno =30

  4  order by 3 desc;


     EMPNO ENAME             SAL     DEPTNO

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

      7698 BLAKE            2850         30

      7499 ALLEN            1600         30

      7844 TURNER           1500         30

      7521 WARD             1250         30

      7654 MARTIN           1250         30

      7900 JAMES             950         30

6 rows selected.


從以上的一些操作,可以看到,order by有時候也起到分組的作用,
只是他的分組功能沒有聚合作用,就是不能跟聚合函式(統計函式)
搭配使用。排序時,排序的欄位可以用代號代替使用,如以上的order by 3 desc.



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31392094/viewspace-2125908/,如需轉載,請註明出處,否則將追究法律責任。

相關文章