ITPub博客

首页 > 数据库 > Oracle > select查询之二:分组与排序

select查询之二:分组与排序

原创 Oracle 作者:skyin_1603 时间:2016-10-08 01:07:45 0 删除 编辑
平时,为了更容易看查询出来的数据,我们往往通过一些分组或者排序处理,
在这里简单讲一下分组字句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博客 ” ,链接:https://blog.itpub.net/31392094/viewspace-2125908/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-09-06

  • 博文量
    231
  • 访问量
    215126