我有一张桌子col,我有:
select * from offc.col;

我使用按年查询ans dept_id wise返回了一些数据:
SELECT dept_id,
year,
Max(marks) marks
FROM offc.col
GROUP BY dept_id,
year
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,
year
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
c.*,
dense_rank() over(partition by dept_id, year order by marks desc nulls last) as dr
from offc.col c
) x
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
FROM offc.col
GROUP BY dept_id,
year
-- ORDER BY dept_id,
-- year
); 演示的错误与order by和工作良好,没有order by。
干杯!!
https://stackoverflow.com/questions/58473905
复制相似问题