我有一张桌子
col
,我有:
select * from offc.col;
我使用按年查询ans dept_id wise返回了一些数据:
SELECT dept_id,
year,
Max(marks) marks
FROM offc.col
GROUP BY dept_id,
ORDER BY dept_id,
year
我得到的数据是:
这里没有问题,因为我的sql正在运行right.So,我需要提取
col
表的所有信息,所以我将子查询用作:
SELECT *
FROM offc.col
WHERE ( dept_id, year, marks ) IN (SELECT dept_id,
year,
Max(marks) marks
FROM offc.col
GROUP BY dept_id,
ORDER BY dept_id,
year);
但是,我犯了错误,因为:
ORA-00920: invalid relational operator
我也在其他页面搜索了这个错误,但是在我的例子中,我发现这些错误作为error.But的括号错了,我不知道这里发生了什么?
发布于 2019-10-20 14:28:34
我建议使用
dense_rank
分析函数,因为如果两个部门在同一年有相同的分数,它们可以返回(您当前的逻辑与此相同)。
Row_number
只会给你一个随机记录,如果两个部门在同一年有相同的分数。
select *
from (
select
dense_rank() over(partition by dept_id, year order by marks desc nulls last) as dr
from offc.col c
where dr = 1
order by dept_id, year
另外,您的查询是正确的,只需从其中移除顺序即可。
SELECT *
FROM offc.col
WHERE ( dept_id, year, marks ) IN (SELECT dept_id,
year,
Max(marks) marks