首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

用简明的sql 查询出平均值的最大值

2012-12-18 
用简洁的sql 查询出平均值的最大值表workload(empid,workdate,hours),用一条sql查询出平均每天工作小时数

用简洁的sql 查询出平均值的最大值
表workload(empid,workdate,hours),用一条sql查询出平均每天工作小时数最多的员工id,试了很多,都感觉写的很累赘,

select empid
  from (select empid, avg(hours) as avghours          
         from workload
         group by empid) c
 where c.avghours>= (select max(avghours)
                      from (select empid, avg(hours) as avghours
                              from workload
                             group by empid))
用了两次相同的子查询,
谁能用简洁的一条sql搞定呢,麻烦献上一条哦,感谢!!!
[最优解释]

引用:
SQL code?123456789select empid  from( select empid,        avg(hours),       row_number()over(order by avg(hours) desc) as rn  from workload group by empid)where rn = 1 -- rn = 1 平均时长第一,r……

正解,
分析函数,改成rank更好吧,可以查询出并列的。
[其他解释]
SELECT empid
  FROM (SELECT AVG(hours), empid
          FROM workload
         GROUP BY empid
         ORDER BY AVG(hours) DESC)
 WHERE ROWNUM = 1

[其他解释]

select empid
  from( 
select empid, 
       avg(hours),
       row_number()over(order by avg(hours) desc) as rn
  from workload
 group by empid
)where rn = 1 -- rn = 1 平均时长第一,rn=2 平均时长第二 通用不?

[其他解释]
rank和dense_rank我怎么就没想到呢。

[其他解释]
引用:
引用:
SQL code?123456789select empid  from( select empid,        avg(hours),       row_number()over(order by avg(hours) desc) as rn  from workload group by empid)where rn = 1 -- rn =……


需要查询出并列的,用rank 怎么写呢?
[其他解释]
感觉有点高级了,试卷里面会考rank这个用法吗? 不知道出题者到底需要怎么样的答案
[其他解释]
哦,rank 就是把row_number() 函数换成 rank(), 学了一招了,非常感谢了

热点排行