我需要选择每个序列的最大动作,并列出每个序列的动作号和序列号。
期望的结果:
Serial Action
-----------------
14 1201
101 29
create table listings(serial number(10), action number(10))
Insert into listings(serial, action)
Values ('14', '102');
Insert into listings(serial, action)
Values('14', '1201');
Insert into listings(serial, action)
Values('101', '28');
Insert into listings(serial, action)
Values('101', '29');
Insert into listings(serial, action)
Values('101', '22');
我认为这将返回所需的数据,但不是单组组功能。放置group by子句的几个变体都返回相同的错误:
select *
from (select max(action),
serial
from listings
order by 2 desc)
where rownum < 2;
答案 0 :(得分:2)
如错误所述,您必须使用GROUP BY
子句......
select serial, max(action)
from listings
group by serial;
如果您只想获得前2名,请按顺序排序:
select * from
(select serial, max(action) as MAX_ACTION
from listings
group by serial
order by serial)
where ROWNUM <=2;
GROUP BY
做什么?
令人惊讶的是,它将结果组合在一起,并在组上应用聚合函数。这有一些限制:
GROUP BY
子句中列出的结果中包含非聚合列
GROUP BY
和ORDER BY
子句中使用列名别名。如果你有一个TRUNC
- 编辑DATE
在那里使用 - 你必须重复表达... 推荐阅读