不是单组组功能ORACLE

时间:2013-02-17 18:55:11

标签: database oracle

表:http://pastie.org/6205255

如何显示有max(总和(时间))的导师姓名?

首先我尝试了这个:

select max(sum(time))
from tutorial
group by tutor;

答案是5 它只是显示了最大时间但未显示谁有时间(导师姓名) 我试图添加选择导师,最大(总和(时间))....但错误

第二,我试过这个:(最大和总和之间的分离)

select max(x) "THE MAXIMUM"
from (
    select sum(time) x,tutor from tutorial group by tutor
);

回答= 5。 我试着写select tutor,max(x) "THE MAXIMUM" ......但仍然是错误

他们所有人都有同样的错误。 错误说:

ORA-00937: not a single-group group function
00937. 00000 -  "not a single-group group function"

请帮帮我

2 个答案:

答案 0 :(得分:0)

对于Oracle,一种简单的方法是只做一个正常的GROUP BY,按时间总和(降序)排序并选择第一行;

SELECT * FROM (
   SELECT SUM("time") "time", "tutor"
   FROM tutorial
   GROUP BY "tutor"
   ORDER BY "time" DESC
)
WHERE ROWNUM=1

An SQLfiddle to test with

答案 1 :(得分:0)

我今天无法访问计算机,但试试这个。

with a as (
  select tutor, sum(time) sum_time
    from tutorial
    group by tutor
b as (
  select tutor, sum_time, rank() over( order by sum_time desc) RN
    from a
)
  select tutor, sum_time
    from b
    where RN = 1

如果顶部有多个导师,则可能会返回多行。将排名更改为row_number以随意选择一个。