Oracle之group by及order by详解

group by XXX :以XXX进行分组

order by  YYY:以YYY进行排序

一,如果一个查询中使用了分组函数,任何不在分组函数中的列或表达式必须要在group by中,

且group by语句中不能使用别名否则出错。


              注:在having,where,group by子句中不能使用别名,但在order by 字句中可使用别名 

oracle 规定where子句不可以使用分组函数,这时我们必须使用having子句方可完成功能。

select job_id,avg(sal)

from emp

having avg(salsry)>1500

group by job_id;

使用having子句时,oracle系统的处理顺序是:

1,首先对数据行进行分组。

2,把所得到的分组应用到分组函数中。

3,最好显示满足having条件的记录。

三,分组函数的嵌套
使用嵌套查询:
SELECT W_T_SEQ.NEXTVAL,
       NUMBER,
       ROW_NO
FROM (SELECT NUMBER,
             ROW_NO
      FROM IMP_T IP
      WHERE IP.NUMBER = '80112'
      ORDER BY IP.ROW_NO)

group by,order by 和rownum并用实例:
    select name
     from (
      select name,min(row_no)
        from table_name
       where id = '123456'
       group by name
       having count(1) > 1
       roder by row_no)
      where rownum = 1
下列语句的执行顺序是:


1,执行where子句,查出job符合条件的记录。

2,根据job进行分组。

3,根据分组情况求出各组的平均工资。

4,找出各组中最大和最小的平均工资。

再如下列语句:

  1. select xxx_name, count(*) as counter

  2. from table_y

  3. where where_condition

  4. group by xxx_name

  5. having having_condition

  6. order by zzz

    当看到一个类似上述的包含了where, group by, having, order by等关键字的SQL时,要首先要知道其执行顺序是怎样的,才能判断出其所表达的含义;

 

    下面列出其执行顺序:
    1. 根据where子句选择行;
    2. 根据group by 子句组合行;
    3. 根据having子句筛选组;
    4. 根据order by子句中的分组函数的结果对组进行排序,order by必须使用分组函数或者使用Group by子句中指定的列;
    下面看一个例子:

  1. select CategoryName, count(*), AVG(Rating)

  2. from BOOKSHELF

  3. where Rating>1

  4. group by CategoryName

  5. having CategoryName like 'A%'

  6. order by count(*) desc

    我们现在知道,其执行顺序如下:
    1.基于Where Rating>1 筛选出符合条件的行;
    2.基于group by CategoryName 对筛选的结果进行分组;
    3.为每个CategoryName组计算Count(*)
    4. 基于having CategoryName like 'A%'留下符合条件的组
    5. 根据order by 的条件对剩下的行组进行排序,SQL中的count(*)也是分组函数

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值