如何将行限制为列的SUM等于Oracle中的某个值

时间:2015-12-26 13:18:19

标签: sql oracle

根据我提到的链接,我试图做同样的但是出错了

limiting the rows to where the sum a column equals a certain value in MySQL

首先,这是学习计划表

enter image description here

如果我想获取行,直到CREDIT列的SUM等于18:

enter image description here

如果我想获取行,直到CREDIT列的SUM等于20:

enter image description here

这是我尝试的SQL语句:

SELECT t.matricsno,t.sem,t.credit,
(SELECT SUM(credit) FROM studyplan
WHERE matricsno = 'D031310087')
FROM studyplan t
HAVING SUM(credit) = 18
ORDER BY t.sem,t.subjectcode;

我得到的错误是: ORA-00937:不是单组组功能

感谢您的回复和帮助。

1 个答案:

答案 0 :(得分:3)

这是使用累积金额的一个很好的用例。

假设行的顺序由列semsubjectcode明确定义,正如您的查询所暗示的那样,您可以像这样编写查询:

select *
  from (select t.*,
               sum(t.credit) over (order by t.sem, t.subjectcode) as credit_sum
          from studyplan t
         where t.matricsno = 'D031310087')
 where credit_sum <= 20 -- adjust to desired number of credits
 order by sem, subjectcode